加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

和适当的输出.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读