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