如何为给定的perl脚本启用/禁用打印输出?

时间:2013-12-08 14:42:21

标签: perl debugging cpan

基本上我的意思是:在命令行调用perl脚本时,有没有办法让我禁用函数print的输出?如果在perl的基本实现中不可用那么可能是CPAN吗?

我所知道的事情:

  • perl有一个调试器
  • 将stdout重定向到某个文件然后擦除它(在我的情况下没用,因为我需要STDOUT用于其他东西)
  • 让所有以打印评论开头的行(不缩放,丑陋等等)
  • 在UNIX中重定向到dev / null

我不是指任何警告,例外,错误等......只是标准打印功能或其中任何一个非常亲密的兄弟姐妹。

类似于你如何使用C的#ifdef,但是在文件范围内,并且不必为这么少的东西写这么多。

我愿意安装cpan模块,以防它提供这种功能。

我仅限于Perl 5.14。

1 个答案:

答案 0 :(得分:0)

假设您自己编写此脚本,或者可以对其进行编辑,则可以使用以下内容。

use Getopt::Long;
our $VERBOSE = 0;
GetOptions ('verbose+' => \$VERBOSE);
# ...
xprint(1, "Yadda yadda yadda");
# ...
sub xprint {
    my ($pri, $msg) = @_;
    print("$msg\n") if $pri >= $VERBOSE;
}

编辑:

或没有优先级:

use Getopt::Long;
our $VERBOSE = '';
GetOptions ('verbose' => \$VERBOSE);
# ...
xprint("Yadda yadda yadda");
# ...
sub xprint {
    # can also be replaced with printf(@_) for more cowbell.
    print("$_[0]\n") if $VERBOSE;
}

编辑:

另外,对于#ifdef功能,用一个简单的常量替换整个getopt部分:

use constant VERBOSE => 1;

在print语句后删除VERBOSE中的$

print("$_[0]\n") if VERBOSE;