Hide postderef behind the feature feature
authorFather Chrysostomos <sprout@cpan.org>
Sun, 15 Sep 2013 23:29:21 +0000 (16:29 -0700)
committerRicardo Signes <rjbs@cpan.org>
Sat, 5 Oct 2013 18:20:09 +0000 (14:20 -0400)
t/op/postfixderef.t
toke.c

index 6569db3..080b477 100644 (file)
@@ -16,7 +16,33 @@ BEGIN {
 
 use strict qw(refs subs);
 
-plan(96);
+plan(106);
+
+{
+    no warnings qw 'deprecated syntax';
+    eval '[]->$*';
+    like $@, qr/Can't call method/, '->$* outside of feature scope';
+    eval '[]->@*';
+    like $@, qr/syntax error/, '->@* outside of feature scope';
+    eval '[]->@[1]';
+    like $@, qr/syntax error/, '->@[ outside of feature scope';
+    eval '[]->@{1}';
+    like $@, qr/syntax error/, '->@{ outside of feature scope';
+    eval '[]->%*';
+    like $@, qr/syntax error/, '->%* outside of feature scope';
+    eval '[]->%[1]';
+    like $@, qr/syntax error/, '->%[ outside of feature scope';
+    eval '[]->%{1}';
+    like $@, qr/syntax error/, '->%{ outside of feature scope';
+    eval '[]->&*';
+    like $@, qr/syntax error/, '->&* outside of feature scope';
+    eval '[]->**';
+    like $@, qr/syntax error/, '->** outside of feature scope';
+    eval '[]->*{';
+    like $@, qr/syntax error/, '->*{ outside of feature scope';
+}
+
+use feature 'postderef';
 
 {
     no strict 'refs';
diff --git a/toke.c b/toke.c
index aa88922..2619cc8 100644 (file)
--- a/toke.c
+++ b/toke.c
@@ -5758,9 +5758,11 @@ Perl_yylex(pTHX)
            else if (*s == '>') {
                s++;
                s = SKIPSPACE1(s);
-               if (((*s == '$' || *s == '&') && s[1] == '*')
+               if (FEATURE_POSTDEREF_IS_ENABLED && (
+                   ((*s == '$' || *s == '&') && s[1] == '*')
                  ||((*s == '@' || *s == '%') && strchr("*[{", s[1]))
-                 ||(*s == '*' && (s[1] == '*' || s[1] == '{')))
+                 ||(*s == '*' && (s[1] == '*' || s[1] == '{'))
+                ))
                {
                    PL_expect = XPOSTDEREF;
                    TOKEN(ARROW);