当我运行以下没有参数的script.pl脚本时:
./script.pl
Run Code Online (Sandbox Code Playgroud)
我没有收到消息No arg
.为什么?如何识别if $param
是空值还是空值,与[ -z
ksh 相同?
#!/usr/bin/perl
my $param = $ARGV[0];
if ($param = "") {
print No arg;
} else {
print arg: $param;
}
Run Code Online (Sandbox Code Playgroud)
因为它不是Perl.你在哪里学习这种语法?它有很多错误.
更容易:
#!/usr/bin/perl
if (@ARGV) {
print 'have parameters';
} else {
print q{don't have parameters};
}
Run Code Online (Sandbox Code Playgroud)
这里有一个例子可以更好地说明它。
if( $#ARGV == -1 ){
print "No arguments passed.\n";
} else if( $#ARGV == 0 ){
print "One argument passed.\n";
} else {
print $#ARGV +1 ."arguments passed.\n";
}
Run Code Online (Sandbox Code Playgroud)
我喜欢使用“标量@ARGV”,因为它代表数组中元素的数量。相反,$#ARGV 是数组中最后一个元素的索引。这就是为什么它是一个关闭。如果 $[(这是一个设置 Perl 数组起始索引的特殊变量。)设置为 1 而不是 0(默认值),那么 $#ARGV 就我们的目的而言不会关闭 1。我不会乱用 $[ 因为它是全局的。更改可能会破坏很多模块。
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";
}
Run Code Online (Sandbox Code Playgroud)