Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

How do I get $_ out of PPI::Token::Quote::Double using some PPI/PPIx module/method?

Say I have

#!/usr/bin/perl -- use strict; use warnings; use PPI; use PPI::Dumper; # Load a document my $Module = PPI::Document->new( \q{ print "hi $_\n"; }); print join "\n", PPI::Dumper->new( $Module )->list , "\n"; __END__ PPI::Document PPI::Token::Whitespace ' ' PPI::Statement PPI::Token::Word 'print' PPI::Token::Whitespace ' ' PPI::Token::Quote::Double '"hi $_\n"' PPI::Token::Structure ';' PPI::Token::Whitespace ' '

How do I get $_ out of PPI::Token::Quote::Double using some PPI/PPIx module/method ?

  • Comment on variables /interpolations inside PPI::Token::Quote::Double quoted string
  • Download Code

Replies are listed 'Best First'.
Re: variables /interpolations inside PPI::Token::Quote::Double quoted string
by tobyink (Canon) on May 19, 2013 at 21:41 UTC
Re: variables /interpolations inside PPI::Token::Quote::Double quoted string
by Cow1337killr (Monk) on Sep 06, 2016 at 03:54 UTC

    The input:

    my $foo = $bar; print "hi $foo\n"; print 'hi ', $foo, "\n";

    ...stored in very-easy-print-interpolation2.pl

    Run, thusly:

    ppi_dumper very-easy-print-interpolation2.pl

    ppi_dumper is in App-PPI-Dumper.

    The output:

    PPI::Document PPI::Statement::Variable PPI::Token::Word 'my' PPI::Token::Whitespace ' ' PPI::Token::Symbol '$foo' PPI::Token::Whitespace ' ' PPI::Token::Operator '=' PPI::Token::Whitespace ' ' PPI::Token::Symbol '$bar' PPI::Token::Structure ';' PPI::Token::Whitespace '\n' PPI::Statement PPI::Token::Word 'print' PPI::Token::Whitespace ' ' PPI::Token::Quote::Double '"hi $foo\n"' PPI::Token::Structure ';' PPI::Token::Whitespace '\n' PPI::Statement PPI::Token::Word 'print' PPI::Token::Whitespace ' ' PPI::Token::Quote::Single ''hi '' PPI::Token::Operator ',' PPI::Token::Whitespace ' ' PPI::Token::Symbol '$foo' PPI::Token::Operator ',' PPI::Token::Whitespace ' ' PPI::Token::Quote::Double '"\n"' PPI::Token::Structure ';'

    This demonstrates that PPI does not handle interpolation in a print statement very well, but a print statement with a list does work.