1use warnings; 2use strict; 3 4use Test::More tests => 16; 5 6BEGIN { $^H |= 0x20000; } 7 8my $t; 9 10$t = ""; 11eval q{ 12 use XS::APItest qw(blockasexpr); 13 $t .= "a"; 14 $t .= "b" . blockasexpr { "c"; } . "d"; 15 $t .= "e"; 16}; 17is $@, ""; 18is $t, "abcde"; 19 20$t = ""; 21eval q{ 22 use XS::APItest qw(blockasexpr); 23 no warnings "void"; 24 $t .= "a"; 25 $t .= "b" . blockasexpr { "z"; "c"; } . "d"; 26 $t .= "e"; 27}; 28is $@, ""; 29is $t, "abcde"; 30 31$t = ""; 32eval q{ 33 use XS::APItest qw(blockasexpr); 34 $t .= "a"; 35 $t .= "b" . blockasexpr { if($t eq "a") { "c"; } else { "d"; } } . "e"; 36 $t .= "f"; 37}; 38is $@, ""; 39is $t, "abcef"; 40 41$t = ""; 42eval q{ 43 use XS::APItest qw(blockasexpr); 44 $t .= "a"; 45 $t .= "b" . blockasexpr { if($t eq "z") { "c"; } else { "d"; } } . "e"; 46 $t .= "f"; 47}; 48is $@, ""; 49is $t, "abdef"; 50 51$t = ""; 52eval q{ 53 use XS::APItest qw(blockasexpr); 54 no warnings "void"; 55 $t .= "a"; 56 $t .= "b" . blockasexpr { { "z"; "c"; } } . "d"; 57 $t .= "e"; 58}; 59is $@, ""; 60is $t, "abcde"; 61 62$t = ""; 63eval q{ 64 use XS::APItest qw(blockasexpr); 65 $t .= "a"; 66 $t .= blockasexpr { 67 my $t = "z"; 68 "b"; 69 }; 70 $t .= "c"; 71}; 72is $@, ""; 73is $t, "abc"; 74 75$t = ""; 76eval q{ 77 use XS::APItest qw(blockasexpr); 78 my $f = 1.5; 79 $t .= "a(".($f+$f).")"; 80 $t .= "b(" . blockasexpr { 81 use integer; 82 $f+$f; 83 } . ")"; 84 $t .= "c(".($f+$f).")"; 85}; 86is $@, ""; 87is $t, "a(3)b(2)c(3)"; 88 89$t = ""; 90eval q{ 91 use XS::APItest qw(blockasexpr); 92 our $z = "z"; 93 $t .= "a$z"; 94 $t .= "b" . blockasexpr { 95 local $z = "y"; 96 $z; 97 }; 98 $t .= "c$z"; 99}; 100is $@, ""; 101is $t, "azbycz"; 102 1031; 104