没有元素时$#ArrayName的默认值(Perl)

没有元素时$#ArrayName的默认值(Perl),perl,Perl,下面的代码显示在命令行中输入的参数数量 #!/usr/bin/perl –w $myVar = $#ARGV + 1; print "Hi " , $ARGV[0] , "\n"; print "You have $myVar arguments\n"; 在perlintro中,$#ARGV是一个特殊变量,它告诉您数组最后一个元素的索引 如果是这种情况,当我没有在命令行中输入任何值时,$myVar值如何以0结束 是因为当数组中没有元素时,“no element”的索引是-1吗?As-1+1=0

下面的代码显示在命令行中输入的参数数量

#!/usr/bin/perl –w
$myVar = $#ARGV + 1;
print "Hi " , $ARGV[0] , "\n";
print "You have $myVar arguments\n";
在perlintro中,
$#ARGV
是一个特殊变量,它告诉您数组最后一个元素的索引

如果是这种情况,当我没有在命令行中输入任何值时,
$myVar
值如何以0结束

是因为当数组中没有元素时,“no element”的索引是-1吗?As-1+1=0。

根据页面:

@ARGV数组@ARGV包含用于 剧本$#ARGV通常是参数数减去1, 因为$ARGV[0]是第一个参数,而不是程序的命令名 它本身有关命令名,请参见$0

根据该页面:

@ARGV数组@ARGV包含用于 剧本$#ARGV通常是参数数减去1, 因为$ARGV[0]是第一个参数,而不是程序的命令名 它本身有关命令名,请参见$0

$#ARGV
的意思是“ARGV的最后一个元素的索引”——而不仅仅是perlintro语句所暗示的任何数组

对于任何数组,如果为空,
$#array
将为-1,
scalar@array
将为0

警告:如果有人修改了
$[
(“第一个元素的索引”),这也会改变
$#
。如果您在长度之后,可能应该始终使用
标量@array
,并使用
$array[-1]
获取最后一个元素

> cat demo.pl
my @array = ();
print "Size=", scalar @array, " items, last=", $#array, "\n";
$[ = 2;
print "Size=", scalar @array, " items, last=", $#array, "\n";
> perl demo.pl
Size=0 items, last=-1
Size=0 items, last=1
$#ARGV
的意思是“ARGV的最后一个元素的索引”——而不仅仅是perlintro语句所暗示的任何数组

对于任何数组,如果为空,
$#array
将为-1,
scalar@array
将为0

警告:如果有人修改了
$[
(“第一个元素的索引”),这也会改变
$#
。如果您在长度之后,可能应该始终使用
标量@array
,并使用
$array[-1]
获取最后一个元素

> cat demo.pl
my @array = ();
print "Size=", scalar @array, " items, last=", $#array, "\n";
$[ = 2;
print "Size=", scalar @array, " items, last=", $#array, "\n";
> perl demo.pl
Size=0 items, last=-1
Size=0 items, last=1
你说得对

正如斯奎盖指出的那样,
$#ARGV
标量@ARGV-1

<> p>但是,要计算传递给程序的参数的数量要少得多,您应该考虑使用:

my $count = scalar @ARGV;  # Explicit using of 'scalar' function
my $count = 0+@ARGV;       # Implicitly enforce scalar context
my $count = @ARGV;         # Since the context is already set by LHS
你说得对

正如斯奎盖指出的那样,
$#ARGV
标量@ARGV-1

<> p>但是,要计算传递给程序的参数的数量要少得多,您应该考虑使用:

my $count = scalar @ARGV;  # Explicit using of 'scalar' function
my $count = 0+@ARGV;       # Implicitly enforce scalar context
my $count = @ARGV;         # Since the context is already set by LHS
是否因为数组中没有元素时,“no element”的索引为-1?为-1+1=0

差不多。这不是“无元素索引”,而是适用以下规则:

以下情况始终正确:

标量(@whater)=$#whater+1

是否因为数组中没有元素时,“no element”的索引为-1?为-1+1=0

差不多。这不是“无元素索引”,而是适用以下规则:

以下情况始终正确:

标量(@whater)=$#whater+1


如果某个(邪恶的)人改变了
$[
,那就不是真的。如果某个(邪恶的)人改变了
$[
$#ARGV
不会永远是
标量@ARGV-1
$#
是个不可靠的情妇,应该被当作一把锋利的斧头来对待。@rjp:你说得对,
$#ARGV=@ARGV-1+$
。唯一阻止我提到它的是
$[
在5.12中被弃用。目前,我敢说99.9%的时间
$[==0
,如果不是更多的话,$#ARGV也不会总是
标量@ARGV-1
$#
是一个不可靠的情妇,应该被当作一把锋利的斧头来对待。@rjp:你说得对,
$#ARGV=@ARGV-1+$
。唯一阻止我提及的是
$[
在5.12中被弃用。目前,我敢说99.9%的时间
$[==0
,如果不是更多的话