summaryrefslogtreecommitdiff
path: root/t/op/array_base.t
diff options
context:
space:
mode:
Diffstat (limited to 't/op/array_base.t')
-rw-r--r--t/op/array_base.t81
1 files changed, 6 insertions, 75 deletions
diff --git a/t/op/array_base.t b/t/op/array_base.t
index 3cc9b2425c..369cf31614 100644
--- a/t/op/array_base.t
+++ b/t/op/array_base.t
@@ -3,80 +3,11 @@ use strict;
require './test.pl';
-plan (tests => 24);
-no warnings 'deprecated';
+plan (tests => 4);
-# Bug #27024
-{
- # this used to segfault (because $[=1 is optimized away to a null block)
- my $x;
- $[ = 1 while $x;
- pass('#27204');
- $[ = 0; # restore the original value for less side-effects
-}
+is(eval('$['), 0);
+is(eval('$[ = 0; 123'), 123);
+is(eval('$[ = 1; 123'), undef);
+like($@, qr/\AAssigning non-zero to \$\[ is no longer possible/);
-# [perl #36313] perl -e "1for$[=0" crash
-{
- my $x;
- $x = 1 for ($[) = 0;
- pass('optimized assignment to $[ used to segfault in list context');
- if ($[ = 0) { $x = 1 }
- pass('optimized assignment to $[ used to segfault in scalar context');
- $x = ($[=2.4);
- is($x, 2, 'scalar assignment to $[ behaves like other variables');
- $x = (($[) = 0);
- is($x, 1, 'list assignment to $[ behaves like other variables');
- $x = eval q{ ($[, $x) = (0) };
- like($@, qr/That use of \$\[ is unsupported/,
- 'cannot assign to $[ in a list');
- eval q{ ($[) = (0, 1) };
- like($@, qr/That use of \$\[ is unsupported/,
- 'cannot assign list of >1 elements to $[');
- eval q{ ($[) = () };
- like($@, qr/That use of \$\[ is unsupported/,
- 'cannot assign list of <1 elements to $[');
-}
-
-
-{
- $[ = 11;
- cmp_ok($[ + 0, '==', 11, 'setting $[ affects $[');
- our $t11; BEGIN { $t11 = $^H{'$['} }
- cmp_ok($t11, '==', 11, 'setting $[ affects $^H{\'$[\'}');
-
- BEGIN { $^H{'$['} = 22 }
- cmp_ok($[ + 0, '==', 22, 'setting $^H{\'$\'} affects $[');
- our $t22; BEGIN { $t22 = $^H{'$['} }
- cmp_ok($t22, '==', 22, 'setting $^H{\'$[\'} affects $^H{\'$[\'}');
-
- BEGIN { %^H = () }
- my $val = do {
- no warnings 'uninitialized';
- $[;
- };
- cmp_ok($val, '==', 0, 'clearing %^H affects $[');
- our $t0; BEGIN { $t0 = $^H{'$['} }
- cmp_ok($t0, '==', 0, 'clearing %^H affects $^H{\'$[\'}');
-}
-
-{
- $[ = 13;
- BEGIN { $^H |= 0x04000000; $^H{foo} = "z"; }
-
- our($ri0, $rf0); BEGIN { $ri0 = $^H; $rf0 = $^H{foo}; }
- cmp_ok($[ + 0, '==', 13, '$[ correct before require');
- ok($ri0 & 0x04000000, '$^H correct before require');
- is($rf0, "z", '$^H{foo} correct before require');
-
- our($ra1, $ri1, $rf1, $rfe1);
- BEGIN { require "op/array_base.aux"; }
- cmp_ok($ra1, '==', 0, '$[ cleared for require');
- ok(!($ri1 & 0x04000000), '$^H cleared for require');
- is($rf1, undef, '$^H{foo} cleared for require');
- ok(!$rfe1, '$^H{foo} cleared for require');
-
- our($ri2, $rf2); BEGIN { $ri2 = $^H; $rf2 = $^H{foo}; }
- cmp_ok($[ + 0, '==', 13, '$[ correct after require');
- ok($ri2 & 0x04000000, '$^H correct after require');
- is($rf2, "z", '$^H{foo} correct after require');
-}
+1;