PPI 对 perl 的 heredoc 的标记化不正确
Incorrect tokenizing of perl's heredoc by PPI
我正在使用 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
我正在使用 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