1898184e3Ssthen#!./perl -w 2898184e3Ssthen 3*b8851fccSafresh1chdir 't' if -d 't'; 4898184e3Ssthenrequire './test.pl'; 5898184e3Ssthenuse strict; 6898184e3Ssthen 7898184e3Ssthen{ 8898184e3Ssthen package End; 9898184e3Ssthen sub DESTROY { $_[0]->() } 10898184e3Ssthen sub main::end(&) { 11898184e3Ssthen my($cleanup) = @_; 12898184e3Ssthen return bless(sub { $cleanup->() }, "End"); 13898184e3Ssthen } 14898184e3Ssthen} 15898184e3Ssthen 16898184e3Ssthenmy($val, $err); 17898184e3Ssthen 18898184e3Ssthen$@ = "t0\n"; 19898184e3Ssthen$val = eval { 20898184e3Ssthen $@ = "t1\n"; 21898184e3Ssthen 1; 22898184e3Ssthen}; $err = $@; 2391f110e0Safresh1is($val, 1, "true return value from successful eval block"); 2491f110e0Safresh1is($err, "", "no exception after successful eval block"); 25898184e3Ssthen 26898184e3Ssthen$@ = "t0\n"; 27898184e3Ssthen$val = eval { 28898184e3Ssthen $@ = "t1\n"; 29898184e3Ssthen do { 30898184e3Ssthen die "t3\n"; 31898184e3Ssthen }; 32898184e3Ssthen 1; 33898184e3Ssthen}; $err = $@; 3491f110e0Safresh1is($val, undef, "undefined return value from eval block with 'die'"); 3591f110e0Safresh1is($err, "t3\n", "exception after eval block with 'die'"); 36898184e3Ssthen 37898184e3Ssthen$@ = "t0\n"; 38898184e3Ssthen$val = eval { 39898184e3Ssthen $@ = "t1\n"; 40898184e3Ssthen local $@ = "t2\n"; 41898184e3Ssthen 1; 42898184e3Ssthen}; $err = $@; 4391f110e0Safresh1is($val, 1, "true return value from successful eval block with localized \$@"); 4491f110e0Safresh1is($err, "", "no exception after successful eval block with localized \$@"); 45898184e3Ssthen 46898184e3Ssthen$@ = "t0\n"; 47898184e3Ssthen$val = eval { 48898184e3Ssthen $@ = "t1\n"; 49898184e3Ssthen local $@ = "t2\n"; 50898184e3Ssthen do { 51898184e3Ssthen die "t3\n"; 52898184e3Ssthen }; 53898184e3Ssthen 1; 54898184e3Ssthen}; $err = $@; 5591f110e0Safresh1is($val, undef, 5691f110e0Safresh1 "undefined return value from eval block with 'die' and localized \$@"); 5791f110e0Safresh1is($err, "t3\n", 5891f110e0Safresh1 "exception after eval block with 'die' and localized \$@"); 59898184e3Ssthen 60898184e3Ssthen$@ = "t0\n"; 61898184e3Ssthen$val = eval { 62898184e3Ssthen $@ = "t1\n"; 63898184e3Ssthen my $c = end { $@ = "t2\n"; }; 64898184e3Ssthen 1; 65898184e3Ssthen}; $err = $@; 6691f110e0Safresh1is($val, 1, "true return value from eval block with 'end'"); 6791f110e0Safresh1is($err, "", "no exception after eval block with 'end'"); 68898184e3Ssthen 69898184e3Ssthen$@ = "t0\n"; 70898184e3Ssthen$val = eval { 71898184e3Ssthen $@ = "t1\n"; 72898184e3Ssthen my $c = end { $@ = "t2\n"; }; 73898184e3Ssthen do { 74898184e3Ssthen die "t3\n"; 75898184e3Ssthen }; 76898184e3Ssthen 1; 77898184e3Ssthen}; $err = $@; 7891f110e0Safresh1is($val, undef, "undefined return value from eval block with 'end' and 'die'"); 7991f110e0Safresh1is($err, "t3\n", "exception after eval block with 'end' and 'die'"); 80898184e3Ssthen 81898184e3Ssthendone_testing(); 82