我正在尝试编写一个快速脚本,我可以传递不同的开关,以便与基于我查询的URL返回文本的Web API进行交互。因此,我没有尝试复制/粘贴URL等等,而是可以运行script.pl --history,例如......无论如何,我的代码看起来像这样
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long qw(GetOptions);
use WWW::Curl::Easy;
my $APIKEY = "myapikey";
my $ip;
my $hist;
my $health;
my $url;
#... etc
GetOptions(
'ip=s' => \$ip,
'history' => \$history
'health' => \$health
) or die "Useage: blah blah" if $history and not $ip;
if ($health) {
$url = "appropriateurlhere";
}
#curl logic/handling/printing/etc
因此,如果我尝试做script.pl --health,并打印“$ health”,它应该被设置为某种真正的价值,但事实并非如此。这是未定义的......我无法弄清楚原因。
答案 0 :(得分:5)
你的问题是if语句修饰符:
GetOptions(
'ip=s' => \$ip,
'history' => \$history
'health' => \$health
) or die "Useage: blah blah" if $history and not $ip; # <-- remove this if;
永远不会调用GetOptions,因为$history
在达到if时会是undef。
答案 1 :(得分:2)
它工作正常(除了缺少,
),但这里有一个错误:
GetOptions(
'ip=s' => \$ip,
'history' => \$history
'health' => \$health
) or die "Useage: blah blah"
if $history and not $ip;
由于$history
未定义,因此GetOptions
未执行if
整个if X and not Y
。此外,您不应该使用if X && ! Y
,而应使用for (var key of Object.keys(sasa)) {
$scope.data.push(sasa[key]);
}
。