我试图想出一些逻辑来为我的脚本提供将输出发送到何处的选项。
这是我开始编写的测试脚本,我开始尝试思考这两个选项的组合,但结果却失败了。我知道我想太多了。
#!/usr/bin/perl
use strict;
use warnings;
# Modules to load
use Getopt::Long;
use Term::ANSIColor qw(:constants);
my $output = 0;
my $logfile = '';
GetOptions(
'o' => \$output,
'l' => \$logfile
);
if (($output == 1) && (! $logfile eq '')){
} elsif (($output == 0)($logfile eq '')){
}
如果这有任何用处,请成为我的客人。
我想要 3 个选项
0 = 关闭 1 = 标准输出 2 = 日志文件
当我想添加自定义日志文件参数时,我对自己有些困扰。我的印象是我无法将 2 个参数合并到同一个参数中,可以吗?
在我要写入输出的地方,我将根据条件使用简单的 if
语句进行控制,在我的第一次交互中,它只允许输出到标准输出。我只是使用了 -o
选项并指定了 0
或 1
。如果为 1,则写入该行,如果为 0,则不写入。
如果有比上面的解决方案更简单的解决方案,我愿意接受任何事情。
提前致谢。
最佳答案
按照 TLP 的思路,我建议使用 $verbose
和 $logfile
选项,我还建议隐式设置 $verbose
如果使用 $logfile
则为 true。照常使用 $verbose
控制 print
命令。最大的魔力就是使用 select
如果没有给出文件句柄,则控制 print
将其输出发送到的位置。
#!/usr/bin/perl
use strict;
use warnings;
# Modules to load
use Getopt::Long;
use Term::ANSIColor qw(:constants);
my $verbose = 0;
my $logfile;
GetOptions(
'verbose' => \$verbose,
'logfile=s' => \$logfile,
);
if (defined $logfile) {
$verbose = 1;
open my $log_handle, '>', $logfile or die "Could not open $logfile";
# select makes print point to LOGFILE
select($log_handle);
}
# do stuff
print "Stuff" if $verbose;
此外,由于 Getopt::Long
为您提供了长选项,因此我已将选项名称更改为人类可读的 verbose
和 logfile
,但是您可以根据自己的喜好使用短-v
或长--verbose
。
关于perl - 将输出发送到日志文件或 STDOUT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6091430/