goto &fred()
+ (in cleanup) foo bar
+ package Foo;
+ DESTROY { die "foo bar" }
+ { bless [], 'Foo' for 1..10 }
__END__
# pp_ctl.c
-use warning 'syntax' ;
+use warnings 'syntax' ;
format STDOUT =
@<<< @<<<
1
1
########
# pp_ctl.c
-use warning 'unsafe' ;
+no warnings 'syntax' ;
+format =
+@<<< @<<<
+1
+.
+write ;
+EXPECT
+1
+########
+# pp_ctl.c
+use warnings 'unsafe' ;
$_ = "abc" ;
while ($i ++ == 0)
{
s/ab/last/e ;
}
+no warnings 'unsafe' ;
+while ($i ++ == 0)
+{
+ s/ab/last/e ;
+}
EXPECT
Exiting substitution via last at - line 7.
########
# pp_ctl.c
-use warning 'unsafe' ;
+use warnings 'unsafe' ;
sub fred { last }
{ fred() }
+no warnings 'unsafe' ;
+sub joe { last }
+{ joe() }
EXPECT
Exiting subroutine via last at - line 3.
########
# pp_ctl.c
-use warning 'unsafe' ;
-{ eval "last" }
+{
+ eval "use warnings 'unsafe' ; last;"
+}
+print STDERR $@ ;
+{
+ eval "no warnings 'unsafe' ;last;"
+}
print STDERR $@ ;
EXPECT
Exiting eval via last at (eval 1) line 1.
########
# pp_ctl.c
-use warning 'unsafe' ;
+use warnings 'unsafe' ;
@a = (1,2) ;
@b = sort { last } @a ;
+no warnings 'unsafe' ;
+@b = sort { last } @a ;
EXPECT
Exiting pseudo-block via last at - line 4.
Can't "last" outside a block at - line 4.
########
# pp_ctl.c
-use warning 'unsafe' ;
+use warnings 'unsafe' ;
$_ = "abc" ;
fred:
while ($i ++ == 0)
{
s/ab/last fred/e ;
}
+no warnings 'unsafe' ;
+while ($i ++ == 0)
+{
+ s/ab/last fred/e ;
+}
EXPECT
Exiting substitution via last at - line 7.
########
# pp_ctl.c
-use warning 'unsafe' ;
+use warnings 'unsafe' ;
sub fred { last joe }
joe: { fred() }
+no warnings 'unsafe' ;
+sub Fred { last Joe }
+Joe: { Fred() }
EXPECT
Exiting subroutine via last at - line 3.
########
# pp_ctl.c
-use warning 'unsafe' ;
-joe: { eval "last joe" }
+joe:
+{ eval "use warnings 'unsafe' ; last joe;" }
+print STDERR $@ ;
+Joe:
+{ eval "no warnings 'unsafe' ; last Joe;" }
print STDERR $@ ;
EXPECT
-Exiting eval via last at (eval 1) line 2.
+Exiting eval via last at (eval 1) line 1.
########
# pp_ctl.c
-use warning 'unsafe' ;
+use warnings 'unsafe' ;
@a = (1,2) ;
fred: @b = sort { last fred } @a ;
+no warnings 'unsafe' ;
+Fred: @b = sort { last Fred } @a ;
EXPECT
Exiting pseudo-block via last at - line 4.
Label not found for "last fred" at - line 4.
########
# pp_ctl.c
-use warning 'recursion' ;
+use warnings 'recursion' ;
BEGIN { warn "PREFIX\n" ;}
sub fred
{
goto &fred()
EXPECT
Deep recursion on subroutine "main::fred" at - line 6.
+########
+# pp_ctl.c
+no warnings 'recursion' ;
+BEGIN { warn "PREFIX\n" ;}
+sub fred
+{
+ goto &fred() if $a++ < 200
+}
+
+goto &fred()
+EXPECT
+Can't find label
+########
+# pp_ctl.c
+use warnings 'unsafe' ;
+package Foo;
+DESTROY { die "@{$_[0]} foo bar" }
+{ bless ['A'], 'Foo' for 1..10 }
+{ bless ['B'], 'Foo' for 1..10 }
+EXPECT
+ (in cleanup) A foo bar at - line 4.
+ (in cleanup) B foo bar at - line 4.
+########
+# pp_ctl.c
+no warnings 'unsafe' ;
+package Foo;
+DESTROY { die "@{$_[0]} foo bar" }
+{ bless ['A'], 'Foo' for 1..10 }
+{ bless ['B'], 'Foo' for 1..10 }
+EXPECT
+