Perlがスクリプトと混同される

Perlがスクリプトと混同される

1つのパラメータ(ファイル名またはディレクトリ名)を使用するPerlスクリプトを作成します。スクリプトはstat関数を呼び出し、各フィールドの1行の説明とともに結果データを印刷する必要があります。

my $args;
$args=@ARGV;

if ($args<1)
{
    die("Expecting a filename");
}

sub showstat
{
      print " $_[0] dev, device number of filesystem\n";
      print " $_[1] ino,      inode number\n";
      print " $_[2] mode,     file mode  (type and permissions)\n";
      print " $_[3] nlink,    number of (hard) links to the file\n";
}

my $filename=$ARGV[0];
if (open (TESTFILE,$filename))
{
    my @filedata= stat(TESTFILE);

    &showstat(@filedata);
    close (TESTFILE);
}
else
{
    print "error on open $filename";
}

私の質問は、行くのではなく同じであっては$args=@ARGVいけないということです。なぜできないの?$ARGV[0]$args[0]$filename=$ARGV[0]

@showstat(@filedata)下にアンパサンドを入れるのはなぜですか? (定義上、サブルーチンであることを知っています。)しかし、ここで実際の関数が何をしているのかを明確にすることはできますか?

ベストアンサー1

Perlは状況に敏感です。スカラー変数に割り当てられた場合

$args = @ARGV

右の値はスカラーコンテキストで評価されます。つまり、配列はそのサイズを返します。

サブルーチン呼び出しに&記号を使用するのはPerl 4ルールです。最近では、この場合のようにアンパサンドが必ず必要な場合は、アンパサンドを安全に取り外せる場合がほとんどありません。

おすすめ記事