Test that ${foo{bar}} and ${\nfoo{bar}} mean the same thing.
authorBrian Fraser <fraserbn@gmail.com>
Sat, 21 Sep 2013 13:30:48 +0000 (10:30 -0300)
committerBrian Fraser <fraserbn@gmail.com>
Sat, 21 Sep 2013 14:08:05 +0000 (11:08 -0300)
This was changed to consistently parse as $foo{bar} in a49b10d0a8.
Previously, it would parse to either that or ${(foo {bar})},
depending on the presence of newlines, and the existence of a
sub foo with prototype (&).

t/uni/variables.t

index 28d0eb0..c8e6c8c 100644 (file)
@@ -12,7 +12,7 @@ use utf8;
 use open qw( :utf8 :std );
 no warnings qw(misc reserved);
 
-plan (tests => 65878);
+plan (tests => 65880);
 
 # ${single:colon} should not be valid syntax
 {
@@ -273,3 +273,18 @@ EOP
     is($^Q, 24, "...even if we access the variable through the caret name");
     is(\${"\cQ"}, \$^Q, '\${\cQ} == \$^Q');
 }
+
+{
+    # Prior to 5.19.4, the following changed behavior depending
+    # on the presence of the newline after '@{'.
+    sub foo (&) { [1] }
+    my %foo = (a=>2);
+    my $ret = @{ foo { "a" } };
+    is($ret, $foo{a}, '@{ foo { "a" } } is parsed as @foo{a}');
+    
+    $ret = @{
+            foo { "a" }
+        };
+    is($ret, $foo{a}, '@{\nfoo { "a" } } is still parsed as @foo{a}');
+
+}