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