This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Restore null checks to stashpv_hvname_match [perl #101430]
[perl5.git] / t / comp / package_block.t
1 #!./perl
2
3 print "1..7\n";
4
5 $main::result = "";
6 eval q{
7     $main::result .= "a(".__PACKAGE__."/".eval("__PACKAGE__").")";
8     package Foo {
9         $main::result .= "b(".__PACKAGE__."/".eval("__PACKAGE__").")";
10         package Bar::Baz {
11             $main::result .= "c(".__PACKAGE__."/".eval("__PACKAGE__").")";
12         }
13         $main::result .= "d(".__PACKAGE__."/".eval("__PACKAGE__").")";
14     }
15     $main::result .= "e(".__PACKAGE__."/".eval("__PACKAGE__").")";
16 };
17 print $main::result eq
18         "a(main/main)b(Foo/Foo)c(Bar::Baz/Bar::Baz)d(Foo/Foo)e(main/main)" ?
19     "ok 1\n" : "not ok 1\n";
20
21 $main::result = "";
22 eval q{
23     $main::result .= "a($Foo::VERSION)";
24     $main::result .= "b($Bar::VERSION)";
25     package Foo 11 { ; }
26     package Bar 22 {
27         $main::result .= "c(".__PACKAGE__."/".eval("__PACKAGE__").")";
28     }
29 };
30 print $main::result eq "a(11)b(22)c(Bar/Bar)" ? "ok 2\n" : "not ok 2\n";
31
32 $main::result = "";
33 eval q{
34     $main::result .= "a(".__PACKAGE__."/".eval("__PACKAGE__").")";
35     package Foo { }
36     $main::result .= "b(".__PACKAGE__."/".eval("__PACKAGE__").")";
37 };
38 print $main::result eq "a(main/main)b(main/main)" ? "ok 3\n" : "not ok 3\n";
39
40 eval q[package Foo {];
41 print $@ =~ /\AMissing right curly / ? "ok 4\n" : "not ok 4\n";
42
43 $main::result = "";
44 eval q{
45     $main::result .= "a(".__LINE__.")";
46     package Foo {
47         $main::result .= "b(".__LINE__.")";
48         package Bar::Baz {
49             $main::result .= "c(".__LINE__.")";
50         }
51         $main::result .= "d(".__LINE__.")";
52     }
53     $main::result .= "e(".__LINE__.")";
54     package Quux { }
55     $main::result .= "f(".__LINE__.")";
56 };
57 print $main::result eq "a(2)b(4)c(6)d(8)e(10)f(12)" ? "ok 5\n" : "not ok 5\n";
58
59 $main::result = "";
60 $main::warning = "";
61 $SIG{__WARN__} = sub { $main::warning .= $_[0]; };
62 eval q{
63     $main::result .= "a(".__PACKAGE__."/".eval("__PACKAGE__").")";
64     goto l0;
65     $main::result .= "b(".__PACKAGE__."/".eval("__PACKAGE__").")";
66     package Foo {
67         $main::result .= "c(".__PACKAGE__."/".eval("__PACKAGE__").")";
68         l0:
69         $main::result .= "d(".__PACKAGE__."/".eval("__PACKAGE__").")";
70         goto l1;
71         $main::result .= "e(".__PACKAGE__."/".eval("__PACKAGE__").")";
72     }
73     $main::result .= "f(".__PACKAGE__."/".eval("__PACKAGE__").")";
74     l1:
75     $main::result .= "g(".__PACKAGE__."/".eval("__PACKAGE__").")";
76     goto l2;
77     $main::result .= "h(".__PACKAGE__."/".eval("__PACKAGE__").")";
78     package Bar {
79         l2:
80         $main::result .= "i(".__PACKAGE__."/".eval("__PACKAGE__").")";
81     }
82     $main::result .= "j(".__PACKAGE__."/".eval("__PACKAGE__").")";
83 };
84 print $main::result eq
85         "a(main/main)d(Foo/Foo)g(main/main)i(Bar/Bar)j(main/main)" ?
86     "ok 6\n" : "not ok 6\n";
87 print $main::warning =~ /\A
88         Use\ of\ "goto"\ [^\n]*\ line\ 3\.\n
89         Use\ of\ "goto"\ [^\n]*\ line\ 15\.\n
90     \z/x ? "ok 7\n" : "not ok 7\n";
91
92 1;