This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
t/op/lex.t: Fix test
[perl5.git] / t / op / lex.t
index 3f00248..7601b95 100644 (file)
@@ -1,9 +1,10 @@
-#!perl -w
+#!perl
 use strict;
+use warnings;
 
 require './test.pl';
 
-plan(tests => 2);
+plan(tests => 7);
 
 {
     no warnings 'deprecated';
@@ -20,3 +21,51 @@ $yow
 }
 
 curr_test(3);
+
+
+{
+    my %foo = (aap => "monkey");
+    my $foo = '';
+    is("@{[$foo{'aap'}]}", 'monkey', 'interpolation of hash lookup with space between lexical variable and subscript');
+    is("@{[$foo {'aap'}]}", 'monkey', 'interpolation of hash lookup with space between lexical variable and subscript - test for [perl #70091]');
+
+# Original bug report [perl #70091]
+#  #!perl
+#  use warnings;
+#  my %foo;
+#  my $foo = '';
+#  (my $tmp = $foo) =~ s/^/$foo {$0}/e;
+#  __END__
+#
+#  This program causes a segfault with 5.10.0 and 5.10.1.
+#
+#  The space between '$foo' and '{' is essential, which is why piping
+#  it through perl -MO=Deparse "fixes" it.
+#
+
+}
+
+fresh_perl_is(
+  'BEGIN{ ++$_ for @INC{"charnames.pm","_charnames.pm"} } "\N{a}"',
+  'Constant(\N{a}) unknown at - line 1, within string' . "\n"
+ ."Execution of - aborted due to compilation errors.\n",
+   { stderr => 1 },
+  'correct output (and no crash) when charnames cannot load for \N{...}'
+);
+fresh_perl_is(
+  'BEGIN{ ++$_ for @INC{"charnames.pm","_charnames.pm"};
+          $^H{charnames} = "foo" } "\N{a}"',
+  "Undefined subroutine &main::foo called at - line 2.\n"
+ ."Propagated at - line 2, within string\n"
+ ."Execution of - aborted due to compilation errors.\n",
+   { stderr => 1 },
+  'no crash when charnames cannot load and %^H holds string'
+);
+fresh_perl_is(
+  'BEGIN{ ++$_ for @INC{"charnames.pm","_charnames.pm"};
+          $^H{charnames} = \"foo" } "\N{a}"',
+  'Constant(\N{a}) unknown at - line 1, within string' . "\n"
+ ."Execution of - aborted due to compilation errors.\n",
+   { stderr => 1 },
+  'no crash when charnames cannot load and %^H holds string reference'
+);