xref: /openbsd/gnu/usr.bin/perl/t/op/die.t (revision 404b540a)
1#!./perl
2
3print "1..15\n";
4
5$SIG{__DIE__} = sub { print ref($_[0]) ? ("ok ",$_[0]->[0]++,"\n") : @_ } ;
6
7$err = "#[\000]\nok 1\n";
8eval {
9    die $err;
10};
11
12print "not " unless $@ eq $err;
13print "ok 2\n";
14
15$x = [3];
16eval { die $x; };
17
18print "not " unless $x->[0] == 4;
19print "ok 4\n";
20
21eval {
22    eval {
23	die [ 5 ];
24    };
25    die if $@;
26};
27
28eval {
29    eval {
30	die bless [ 7 ], "Error";
31    };
32    die if $@;
33};
34
35print "not " unless ref($@) eq "Out";
36print "ok 10\n";
37
38{
39    package Error;
40
41    sub PROPAGATE {
42	print "ok ",$_[0]->[0]++,"\n";
43	bless [$_[0]->[0]], "Out";
44    }
45}
46
47{
48    # die/warn and utf8
49    use utf8;
50    local $SIG{__DIE__};
51    my $msg = "ce ºtii tu, bã ?\n";
52    eval { die $msg }; print "not " unless $@ eq $msg;
53    print "ok 11\n";
54    our $err;
55    local $SIG{__WARN__} = $SIG{__DIE__} = sub { $err = shift };
56    eval { die $msg }; print "not " unless $err eq $msg;
57    print "ok 12\n";
58    eval { warn $msg }; print "not " unless $err eq $msg;
59    print "ok 13\n";
60    eval qq/ use strict; \$\x{3b1} /;
61    print "not " unless $@ =~ /Global symbol "\$\x{3b1}"/;
62    print "ok 14\n";
63}
64
65# [perl #36470] got uninit warning if $@ was undef
66
67{
68    my $ok = 1;
69    local $SIG{__DIE__};
70    local $SIG{__WARN__} = sub { $ok = 0 };
71    eval { undef $@; die };
72    print "not " unless $ok;
73    print "ok 15\n";
74}
75