PPI icon indicating copy to clipboard operation
PPI copied to clipboard

Readline operator is not properly detected when preceded by a map block

Open s-nez opened this issue 7 years ago • 0 comments

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  	'>'

s-nez avatar Aug 25 '17 11:08 s-nez