空值,當我運行不帶參數如下script.pl腳本:perl的+確定如果param是從ARG
./script.pl
我沒有得到消息No arg
。爲什麼?如何確定$param
是否爲空值或空值,與來自ksh的[ -z
相同?
#!/usr/bin/perl
my $param = $ARGV[0];
if ($param = "") {
print No arg;
} else {
print arg: $param;
}
空值,當我運行不帶參數如下script.pl腳本:perl的+確定如果param是從ARG
./script.pl
我沒有得到消息No arg
。爲什麼?如何確定$param
是否爲空值或空值,與來自ksh的[ -z
相同?
#!/usr/bin/perl
my $param = $ARGV[0];
if ($param = "") {
print No arg;
} else {
print arg: $param;
}
因爲它不是Perl。你從哪裏學習語法?它有很多錯誤。
$param = ""
一個空字符串分配給$param
,這不是你想要的。
null在Perl中拼寫爲undef
。
要比較字符串,請使用eq
operator。
必須quote字符串:print "No arg"
得多:
#!/usr/bin/perl
if (@ARGV) {
print 'have parameters';
} else {
print q{don't have parameters};
}
OK,人們似乎發現了我以前的答案錯領先,所以這裏的另一種嘗試,更直接的這段時間。
你要找的測試是defined
:
my $param = $ARGV[0];
if (defined $param) {
print "arg: $param\n";
} else {
print "No arg\n";
}
如果沒有足夠的參數填寫$ARGV[0]
(或其他後面的元素),在該位置的值將是undef
,所以defined
測試將評估爲false。
下面是一個例子來說明它好一點。
if($#ARGV == -1){
print "No arguments passed.\n";
} else if($#ARGV == 0){
print "One argument passed.\n";
} else {
print $#ARGV +1 ."arguments passed.\n";
}
我喜歡用「標量@ARGV」,因爲這代表了數組中元素的數量。相反,$#ARGV是數組中最後一個元素的索引。這就是爲什麼它是一個。 如果$ [(這是一個設置Perl數組起始索引的特殊變量)被設置爲1而不是0(默認值),那麼對於我們的目的而言,$#ARGV不會被忽略。我不會與$ [因爲它是一個全球性的。改變可能會破壞很多模塊。
my $argument_count = scalar @ARGV;
if($argument_count == 0){
print "No arguments passed.\n";
} else if($argument_count == 1){
print "One argument passed.\n";
} else {
print "$argument_count arguments passed.\n";
}
如果param是空的,你可以自動做出PARAM VAL:
$ARGV[0] || 'yourParam';
這裏很方便片段製作腳本錯誤終止,如果沒有傳遞參數:
if (not defined $ARGV[0]) {
print STDERR "Error: missing parameter. Usage: perl $0 <required-parameter>\n";
exit 1;
}
(有更緊湊和更詳細/強大的方式來寫這個,但作爲一個Perl新手,我發現這提供了一個清晰和簡潔的良好平衡。)
'$#ARGV == -1'是最簡單的。 http://perldoc.perl.org/perlvar。html#%40ARGV – msw 2010-07-27 08:17:38
但是如果ARGV [1];爲空或ARGV [2];如何比較參數與..? – lidia 2010-07-27 08:22:22