xref: /openbsd/gnu/usr.bin/perl/t/comp/package_block.t (revision 898184e3)
1#!./perl
2
3print "1..7\n";
4
5$main::result = "";
6eval 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};
17print $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 = "";
22eval 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};
30print $main::result eq "a(11)b(22)c(Bar/Bar)" ? "ok 2\n" : "not ok 2\n";
31
32$main::result = "";
33eval q{
34    $main::result .= "a(".__PACKAGE__."/".eval("__PACKAGE__").")";
35    package Foo { }
36    $main::result .= "b(".__PACKAGE__."/".eval("__PACKAGE__").")";
37};
38print $main::result eq "a(main/main)b(main/main)" ? "ok 3\n" : "not ok 3\n";
39
40eval q[package Foo {];
41print $@ =~ /\AMissing right curly / ? "ok 4\n" : "not ok 4\n";
42
43$main::result = "";
44eval 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};
57print $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]; };
62eval 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};
84print $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";
87print $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
921;
93