我想启用/禁用我的 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/

10-11 17:21