PPI
PPI copied to clipboard
Misparse of derefs like ${$arr}[0]
t/data/05_lexer/subscript.code
$$arr[0];
${$arr}[0];
Both lines means the same. On the first line PPI interprets '[0] as array subscript (right), but on the second one as anonymous array constructor (wrong). The same with hash derefs.
t/data/05_lexer/subscript.dump
PPI::Document
PPI::Statement
PPI::Token::Cast '$'
PPI::Token::Symbol '$arr'
PPI::Structure::Subscript [ ... ]
PPI::Statement::Expression
PPI::Token::Number '0'
PPI::Token::Structure ';'
PPI::Token::Whitespace '\n'
PPI::Statement
PPI::Token::Cast '$'
PPI::Structure::Block { ... }
PPI::Statement
PPI::Token::Symbol '$arr'
PPI::Structure::Subscript [ ... ]
PPI::Statement::Expression
PPI::Token::Number '0'
PPI::Token::Structure ';'
PPI::Token::Whitespace '\n'
$ prove -Ilib t/05_lexer.t
t/05_lexer.t .. 1/219
# Failed test 't/data/05_lexer/subscript: Generated dump matches stored dump'
# at t/lib/PPI/Test/Run.pm line 73.
# Structures begin differing at:
# $got->[14] = ' PPI::Structure::Constructor [ ... ]'
# $expected->[14] = ' PPI::Structure::Subscript [ ... ]'