我使用Getopt :: Long来获取perl脚本的命令行选项。我想传递一个可选参数,以便我可以在指定值时执行某些操作,如果调用了该选项,则可以执行其他操作,但没有传递任何值。
脚本将被调用如下:
/root/perlscripts/pingm.pl --installdaemon
表示没有指定参数,并且:
--installdaemon=7.7.7.7
用于指定可选参数。
然后我会这样做:
Getopt::Long::Configure(qw(bundling no_getopt_compat));
GetOptions ('installdaemon:s' => \$daeminstall) or die ("Error in command line arguments\n");
下一步是我怀疑的地方。
如果我这样做:
if ($daeminstall) {
print "I was called!\n";
$installdaemon=1;
}
然后,如果使用/root/perlscripts/pingm.pl --installdaemon
调用脚本,则永远不会调用IF块,因为根据perldoc,如果没有指定值,则可选参数将为{1}}获取字符串。
那么如何在不传递值的情况下检查是否指定了选项?
答案 0 :(得分:3)
请检查defined $daemsintall
。如果已定义,则指定相应的选项;现在,您可以将它与空字符串进行比较,以查看它是否设置为某个值。
示例(它使用GetOptionsFromString方法,但方法是相同的):
use Getopt::Long(qw/GetOptionsFromString/);
my $tag;
GetOptionsFromString('--tag', 'tag:s' => \$tag);
if (defined $tag) {
if ($tag eq '') {
$tag = '7.7.7.7';
}
print $tag;
}
else {
print 'No option supplied';
}
这是IDEOne demo。
答案 1 :(得分:2)
使用defined
内置功能:
use warnings;
use strict;
use Getopt::Long;
my $daeminstall;
GetOptions(
'installdaemon:s' => \$daeminstall,
) or die;
if (length $daeminstall) {
print "installdaemon was used, and has a value: $daeminstall\n";
}
elsif (defined $daeminstall) {
print "installdaemon was used, but has no value\n";
}
else {
print "installdaemon was not used\n";
}