Skip to content

Commit ee6745e

Browse files
committed
fix ARGV default in shift
1 parent d785a8e commit ee6745e

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

src/main/java/org/perlonjava/parser/OperatorParser.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@
1818

1919
import static org.perlonjava.lexer.LexerTokenType.*;
2020
import static org.perlonjava.parser.NumberParser.parseNumber;
21-
import static org.perlonjava.parser.ParserNodeUtils.atUnderscore;
22-
import static org.perlonjava.parser.ParserNodeUtils.scalarUnderscore;
21+
import static org.perlonjava.parser.ParserNodeUtils.*;
2322
import static org.perlonjava.parser.SubroutineParser.consumeAttributes;
2423
import static org.perlonjava.parser.TokenUtils.consume;
2524
import static org.perlonjava.parser.TokenUtils.peek;
@@ -417,8 +416,9 @@ static OperatorNode parseOperatorWithOneOptionalArgument(Parser parser, LexerTok
417416
case "pop":
418417
case "shift":
419418
// create `@_` variable
420-
// XXX in main program, use `@ARGV`
421-
operand = atUnderscore(parser);
419+
// in main program, use `@ARGV`
420+
boolean isSub = parser.ctx.symbolTable.getCurrentSubroutine() != null;
421+
operand = parser.isTopLevelScript && !isSub ? atArgv(parser) : atUnderscore(parser);
422422
break;
423423
case "localtime":
424424
case "gmtime":

src/main/java/org/perlonjava/parser/ParserNodeUtils.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,11 @@ static OperatorNode atUnderscore(Parser parser) {
108108
new IdentifierNode("_", parser.tokenIndex), parser.tokenIndex);
109109
}
110110

111+
static OperatorNode atArgv(Parser parser) {
112+
return new OperatorNode("@",
113+
new IdentifierNode("main::ARGV", parser.tokenIndex), parser.tokenIndex);
114+
}
115+
111116
/**
112117
* Creates a ListNode containing @_ for passing as arguments to subroutine calls.
113118
* <p>

0 commit comments

Comments
 (0)