1use warnings; 2use strict; 3 4use Test::More tests => 14; 5 6BEGIN { $^H |= 0x20000; } 7 8my $t; 9 10$t = ""; 11eval q{ 12 use XS::APItest qw(loopblock); 13 do { 14 $t .= "a"; 15 loopblock { 16 $t .= "b"; 17 last unless length($t) < 5; 18 $t .= "c"; 19 } 20 }; 21 $t .= "d"; 22}; 23is $@, ""; 24is $t, "abcbcbd"; 25 26$t = ""; 27eval q{ 28 use XS::APItest qw(loopblock); 29 $t .= "a"; 30 loopblock { 31 $t .= "b"; 32 last unless length($t) < 5; 33 $t .= "c"; 34 } 35}; 36is $@, ""; 37is $t, "abcbcb"; 38 39$t = ""; 40eval q[ 41 use XS::APItest qw(loopblock); 42 do { 43 $t .= "a"; 44 loopblock { 45 $t .= "b"; 46 last unless length($t) < 5; 47 $t .= "c"; 48 } 49]; 50isnt $@, ""; 51is $t, ""; 52 53$t = ""; 54eval q[ 55 use XS::APItest qw(loopblock); 56 $t .= "a"; 57 loopblock { 58 $t .= "b"; 59 last unless length($t) < 5; 60 $t .= "c"; 61 } 62 }; 63]; 64isnt $@, ""; 65is $t, ""; 66 67$t = ""; 68eval q{ 69 use XS::APItest qw(loopblock); 70 my $x = "a"; 71 $t .= $x; 72 do { 73 no warnings "shadow"; 74 $t .= $x; 75 my $x = "b"; 76 $t .= $x; 77 loopblock { 78 $t .= $x; 79 my $x = "c"; 80 $t .= $x; 81 last unless length($t) < 7; 82 $t .= $x; 83 my $x = "d"; 84 $t .= $x; 85 } 86 }; 87 $t .= $x; 88}; 89is $@, ""; 90is $t, "aabbccdbca"; 91 92$t = ""; 93eval q{ 94 use XS::APItest qw(loopblock); 95 do { 96 { $t .= "a"; } 97 loopblock { 98 { $t .= "b"; } 99 last unless length($t) < 5; 100 { $t .= "c"; } 101 } 102 }; 103 $t .= "d"; 104}; 105is $@, ""; 106is $t, "abcbcbd"; 107 108$t = ""; 109eval q{ 110 use XS::APItest qw(loopblock); 111 { $t .= "a"; } 112 loopblock { 113 { $t .= "b"; } 114 last unless length($t) < 5; 115 { $t .= "c"; } 116 } 117}; 118is $@, ""; 119is $t, "abcbcb"; 120 1211; 122