use strict;
use warnings;
-use Test::More tests => 50;
+use Test::More tests => 50 + 4;
use Scope::Upper qw/localize UP HERE/;
SKIP:
{
- skip 'Can\'t localize through a reference in 5.6' => 2 if $] < 5.008;
+ skip 'Can\'t localize through a reference before 5.8.1' => 2 if $] < 5.008001;
eval q{
no strict 'refs';
local ${''} = 9;
SKIP:
{
- skip 'Can\'t localize through a reference in 5.6' => 2 if $] < 5.008;
+ skip 'Can\'t localize through a reference before 5.8.1' => 2 if $] < 5.008001;
eval q{
no strict 'refs';
local ${''} = 10;
}
is foo(), 8, 'localize "&foo", sub { 8 } => UP [ok]';
}
+
+# Invalid
+
+sub invalid_ref { qr/^Invalid \Q$_[0]\E reference as the localization target/ }
+
+{
+ eval { localize \1, 0 => HERE };
+ like $@, invalid_ref('SCALAR'), 'invalid localize \1, 0 => HERE';
+}
+
+{
+ eval { localize [ ], 0 => HERE };
+ like $@, invalid_ref('ARRAY'), 'invalid localize [ ], 0 => HERE';
+}
+
+{
+ eval { localize { }, 0 => HERE };
+ like $@, invalid_ref('HASH'), 'invalid localize { }, 0 => HERE';
+}
+
+{
+ eval { localize sub { }, 0 => HERE };
+ like $@, invalid_ref('CODE'), 'invalid localize sub { }, 0 => HERE';
+}