我想启用/禁用我的 Perl 程序中使用 Smart::Comments 模块的注释。我通过提供 --verbose 开关作为我的命令行选项列表的一部分来考虑这样做的想法。设置此开关后,我想像这样启用 Smart::Comment 模块:
#!/usr/bin/perl
use Getopt::Long;
use Smart::Comments;
my $verbose = 0;
GetOptions ('verbose' => \$verbose);
if (! $verbose) {
eval "no Smart::Comments";
}
### verbose state: $verbose
然而这对我不起作用。这似乎与 Smart::Comments 本身的工作方式有关,所以我怀疑我试图用 eval "no ..."位禁用模块的方式。谁能给我一些指导?
最佳答案
从脚本中取出 use Smart::Comments
行,并使用或不使用 -MSmart::Comments
选项运行您的脚本。使用 -M<module>
选项就像在脚本的开头放置一个 use <module>
语句。
# Smart comments off
$ perl my_script.pl
# Smart comments on
$ perl -MSmart::Comments my_script.pl ...
另请参阅
$ENV{Smart_Comments}
文档中的 Smart::Comments
变量。在这里,您将在脚本中使用
Smart::Comments
,例如use Smart::Comments -ENV;
然后运行
$ perl my_script.pl
$ Smart_Comments=0 perl my_script.pl
在没有智能注释的情况下运行,以及
$ Smart_Comments=1 perl my_script.pl
使用智能注释运行。
更新
Smart::Comments
模块是一个源过滤器。尝试在运行时打开和关闭它(例如 eval "no Smart::Comments"
)是行不通的。充其量,您可以在编译时进行一些配置(例如,在 BEGIN{}
块中,在加载 Smart::Comments
之前):use strict;
use warnings;
BEGIN { $ENV{Smart_Comments} = " @ARGV " =~ / --verbose / }
use Smart::Comments -ENV;
...
关于perl - 有没有办法通过我的 Perl 程序中的命令行开关启用/禁用 Smart::Comments?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7985766/