perl – Devel :: Declare从脚本中删除行
发布时间:2020-12-15 21:45:13 所属栏目:大数据 来源:网络整理
导读:我正在尝试学习 Devel::Declare ,以便尝试在没有源过滤器的情况下重新实现像PDL :: NiceSlice这样的东西.当我注意到它正在从我的脚本中删除下一行时,我正在某个地方.为了说明我已经做了这个最小的例子,其中一个人可以使用comment关键字从代码中删除整行,允许
我正在尝试学习
Devel::Declare ,以便尝试在没有源过滤器的情况下重新实现像PDL :: NiceSlice这样的东西.当我注意到它正在从我的脚本中删除下一行时,我正在某个地方.为了说明我已经做了这个最小的例子,其中一个人可以使用comment关键字从代码中删除整行,允许编译,即使该行上有大量的单词.
#Comment.pm package Comment; use strict; use warnings; use Devel::Declare (); sub import { my $class = shift; my $caller = caller; Devel::Declare->setup_for( $caller,{ comment => { const => &;parser } } ); no strict 'refs'; *{$caller.'::comment'} = sub {}; } sub parser { #my $linestr = Devel::Declare::get_linestr; #print $linestr; Devel::Declare::set_linestr(""); } 1 和 #!/usr/bin/env perl #test.pl use strict; use warnings; use Comment; comment stuff; print "Print 1n"; print "Print 2n"; 只收益率 Print 2 我错过了什么? 附:如果我想把这个问题拿出来的话,我可能还会有更多关于D :: D的问题,所以提前谢谢! 解决方法
好的,我明白了.使用perl -MO = Deparse test.pl你会得到:
use Comment; use warnings; use strict 'refs'; comment("Print 1n"); print "Print 2n"; test.pl syntax OK 这告诉我,如果强制调用注释函数.经过一些实验,我发现我可以将输出设置为显式调用comment(),这样它就不会尝试对下一步调用注释. sub parser { Devel::Declare::set_linestr("comment();"); } 所以deparse是: use Comment; use warnings; use strict 'refs'; comment(); print "Print 1n"; print "Print 2n"; test.pl syntax OK 和适当的输出. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |