我一直在搜索Perl资源,我无法看到我出错的地方。我很确定我错过了一些明显的东西,因为当我分配
时 my $gArgc = $#ARGV;
但请致电我的计划perl pkTkPtBdTkNo.pl test.txt
$#ARGV
等于0,我无法弄明白为什么。
#! /usr/bin/perl -w
use strict;
my $gArgc = $#ARGV;
my $input_line;
my $bad_input;
print($gArgc);
die ("Usage pkTkPtBdTkNo.pl input-line")
if(0 == $gArgc);
$input_line = $ARGV[0];
$bad_input = ($input_line =~ /\"\d+\D+\d*\",/);
print($bad_input);
答案 0 :(得分:9)
来自man perlintro
:
特殊变量$#array告诉你数组的最后一个元素的索引: ... 您可能想要使用$#array + 1来告诉您数组中有多少项。 不要打扰。碰巧使用@array,其中Perl期望找到一个标量值(“in 标量上下文“)将为您提供数组中元素的数量:
因此,如果传递0个参数,$#ARGV将为-1,因为数组中没有元素。如果传递1个参数(如示例所示),$#ARGV将为0。
答案 1 :(得分:2)
这应该始终为真,$#ARGV+1 == @ARGV
因为$#ARGV
是@ARGV
数组的最后一个索引。
答案 2 :(得分:1)
变量 $#ARGV 是@ARGV数组的最后一个元素的下标,并且由于该数组是从零开始的,因此命令行中给出的参数数量为 $#ARGV + 1。
答案 3 :(得分:0)
你可以尝试:
@ARGV 或死“用法pkTkPtBdTkNo.pl输入行”
我发现避免使用$#array_name语法可以极大地提高可读性, 因为perl会自动将@ARGV转换为标量(值为0)。