我正在按顺序使用PPI来标记Perl文件。但是,heredoc似乎没有正确标记。我正在使用以下代码对文件进行标记:
my $file_name = shift @ARGV;
use PPI;
use PPI::Dumper;
my $Document = PPI::Document->new($file_name);
my $Dumper = PPI::Dumper->new($Document);
$Dumper->print;
__END__
下面是对perl文件进行标记化的符号:
my $name = 'Foo';
my $message = <<'END_MESSAGE';
Dear $name,
this is a message I plan to send to you.
regards
the Perl Maven
END_MESSAGE
print $message;
我得到以下输出:
PPI::Document
PPI::Statement::Variable
PPI::Token::Word 'my'
PPI::Token::Whitespace ' '
PPI::Token::Symbol '$name'
PPI::Token::Whitespace ' '
PPI::Token::Operator '='
PPI::Token::Whitespace ' '
PPI::Token::Quote::Single ''Foo''
PPI::Token::Structure ';'
PPI::Token::Whitespace '\n'
PPI::Token::Whitespace ' \n'
PPI::Statement::Variable
PPI::Token::Word 'my'
PPI::Token::Whitespace ' '
PPI::Token::Symbol '$message'
PPI::Token::Whitespace ' '
PPI::Token::Operator '='
PPI::Token::Whitespace ' '
PPI::Token::HereDoc '<<'END_MESSAGE''
PPI::Token::Structure ';'
PPI::Token::Whitespace '\n'
PPI::Token::Whitespace ' \n'
PPI::Statement
PPI::Token::Word 'print'
PPI::Token::Whitespace ' '
PPI::Token::Symbol '$message'
PPI::Token::Structure ';'
PPI::Token::Whitespace '\n'
有什么办法可以获取整个heredoc的值吗?
根据documentation,通过heredoc
方法可以使用此文档的内容:
my $Document = PPI::Document->new($file_name);
my @heredoc = $Document->find_first('PPI::Token::HereDoc')->heredoc;
say join "", @heredoc;
输出:
Dear $name,
this is a message I plan to send to you.
regards
the Perl Maven