PPI
PPI copied to clipboard
Readline operator is not properly detected when preceded by a map block
When a <> operator is preceded by a map block, it is does not show up as PPI::Token::QuoteLike::Readline in the tree, instead two separate PPI::Token::Operators for '<' and '>' are created.
Example:
use PPI;
use PPI::Dumper;
print "Regular readline:\n";
my $doc_readline = PPI::Document->new(\'@lines = <$fh>');
PPI::Dumper->new($doc_readline)->print;
print "\nReadline with a map:\n";
my $doc_readline_map = PPI::Document->new(\'@lines = map { $_ } <$fh>');
PPI::Dumper->new($doc_readline_map)->print;
Output:
Regular readline:
PPI::Document
PPI::Statement
PPI::Token::Symbol '@lines'
PPI::Token::Whitespace ' '
PPI::Token::Operator '='
PPI::Token::Whitespace ' '
PPI::Token::QuoteLike::Readline '<$fh>'
Readline with a map:
PPI::Document
PPI::Statement
PPI::Token::Symbol '@lines'
PPI::Token::Whitespace ' '
PPI::Token::Operator '='
PPI::Token::Whitespace ' '
PPI::Token::Word 'map'
PPI::Token::Whitespace ' '
PPI::Structure::Block { ... }
PPI::Token::Whitespace ' '
PPI::Statement
PPI::Token::Magic '$_'
PPI::Token::Whitespace ' '
PPI::Token::Whitespace ' '
PPI::Token::Operator '<'
PPI::Token::Symbol '$fh'
PPI::Token::Operator '>'