5

私は 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); 
4

4 に答える 4

10

からman perlintro:

特殊変数 $#array は、配列の最後の要素のインデックスを示します: ... $#array + 1 を使用して、配列内にいくつの項目があるかを示したくなるかもしれません。気にしないでください。たまたま、Perl が (「スカラー コンテキストで」) スカラー値を見つけることを期待する場所で @array を使用すると、配列内の要素の数が得られます。

したがって、0 引数を渡すと、配列に要素がないため、$#ARGV は -1 になります。(例のように)引数を 1 つ渡すと、$#ARGV は 0 になります。

于 2013-07-09T23:24:55.067 に答える
1

変数$#ARGVは、@ARGV 配列の最後の要素の添え字です。配列はゼロから始まるため、コマンド ラインで指定される引数の数は$#ARGV + 1 です。

于 2013-07-10T06:30:19.207 に答える
0

あなたは試すことができます:

@ARGV または die "使用法 pkTkPtBdTkNo.pl 入力行"

ここで perl は @ARGV を (値 0 の) スカラーに自動的に変換するため、 $#array_name 構文を完全に回避すると読みやすさが大幅に向上することがわかりました。

于 2013-07-10T06:49:21.330 に答える