$ ppi_dumper code.pl PPI::Document PPI::Token::Comment '#! perl -slw\n' PPI::Statement::Include PPI::Token::Word 'use' PPI::Token::Whitespace ' ' PPI::Token::Word 'strict' PPI::Token::Structure ';' PPI::Token::Whitespace '\n' PPI::Token::Whitespace '\n' PPI::Statement::Variable PPI::Token::Word 'my' PPI::Token::Whitespace ' ' PPI::Token::Symbol '@array' PPI::Token::Whitespace ' ' PPI::Token::Operator '=' PPI::Token::Whitespace ' ' PPI::Token::Word 'split' PPI::Token::Whitespace ' ' PPI::Token::Quote::Single ''term'' PPI::Token::Operator ',' PPI::Token::Whitespace ' ' PPI::Token::Word 'do' PPI::Structure::Block { ... } PPI::Token::Whitespace ' ' PPI::Statement::Variable PPI::Token::Word 'local' PPI::Token::Whitespace ' ' PPI::Token::Magic '$/' PPI::Token::Structure ';' PPI::Token::Whitespace ' ' PPI::Statement PPI::Token::Operator '<' PPI::Token::Word 'DATA' PPI::Token::Operator '>' PPI::Token::Whitespace ' ' PPI::Token::Structure ';' PPI::Token::Whitespace '\n' PPI::Statement PPI::Token::Word 'shift' PPI::Token::Whitespace ' ' PPI::Token::Symbol '@array' PPI::Token::Structure ';' PPI::Token::Whitespace ' ' PPI::Token::Comment '## Discard leading null' PPI::Token::Whitespace '\n' PPI::Token::Whitespace '\n' PPI::Statement PPI::Token::Word 'print' PPI::Token::Whitespace ' ' PPI::Token::Quote::Single ''---'' PPI::Token::Operator ',' PPI::Token::Whitespace ' ' PPI::Token::Quote::Double '"\n"' PPI::Token::Operator ',' PPI::Token::Whitespace ' ' PPI::Token::Magic '$_' PPI::Token::Operator ',' PPI::Token::Whitespace ' ' PPI::Token::Quote::Double '"\n"' PPI::Token::Whitespace ' ' PPI::Token::Word 'for' PPI::Token::Whitespace ' ' PPI::Token::Symbol '@array' PPI::Token::Structure ';' PPI::Token::Whitespace '\n' PPI::Token::Whitespace '\n' PPI::Statement::Data PPI::Token::Separator '__DATA__' PPI::Token::Whitespace '\n' PPI::Token::Data 'term {\nyada yada\n12345\n() ...\n}\n\nterm only occurs here {\ncould be 30 lines here\nbut never that word again until\nanother block starts\nyadada\n}\n\nterm, etc.'