1#!perl 2 3BEGIN { 4 chdir 't' if -d 't'; 5 require './test.pl'; 6 set_up_inc('../lib'); 7} 8 9use warnings; 10use strict; 11 12plan 12; 13 14{ 15 package EvalOnFetch; 16 sub TIESCALAR { bless \(my $z = $_[1]), $_[0] } 17 sub FETCH { eval ${$_[0]} // "died" } 18} 19 20tie my $begindie, "EvalOnFetch", "BEGIN { die } 123"; 21is "$begindie", "died"; 22tie my $unitcheckdie, "EvalOnFetch", "UNITCHECK { die } 123"; 23is "$unitcheckdie", "died"; 24tie my $rundie, "EvalOnFetch", "die; 123"; 25is "$rundie", "died"; 26tie my $runok, "EvalOnFetch", "123"; 27is "$runok", 123; 28 29eval { undef }; 30is eval "BEGIN { die } 123", undef; 31is eval "UNITCHECK { die } 123", undef; 32is eval "die; 123", undef; 33is eval "123", 123; 34 35{ 36 package TryOnFetch; 37 sub TIESCALAR { bless \(my $z = $_[1]), $_[0] } 38 sub FETCH { eval { ${$_[0]} ? die : undef; 123 } // "died" } 39} 40 41tie my $trydie, "TryOnFetch", 1; 42is "$trydie", "died"; 43tie my $tryok, "TryOnFetch", 0; 44is "$tryok", 123; 45 46eval { undef }; 47is do { eval { die; 123 } }, undef; 48is do { eval { undef; 123 } }, 123; 49 501; 51