Perl 与脚本混淆

-3 perl

编写一个 perl 脚本,它接受一个参数,即文件或目录的名称。该脚本应调用 stat 函数并打印结果数据以及每个字段的一行说明。

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";
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果$args=@ARGV, 不应该$ARGV[0]等于$args[0]而不是$filename=$ARGV[0]? 为什么不?

在它说的下面@showstat(@filedata),你为什么要放和号?(我知道它是一个子程序),但是我可以澄清一下这里的实际功能是做什么的吗?

cho*_*oba 5

Perl 是上下文敏感的。如果分配给标量变量

$args = @ARGV
Run Code Online (Sandbox Code Playgroud)

右侧的值在标量上下文中计算,即数组返回其大小。

在子程序调用中使用与号是 Perl 4 的习惯。如今,真正需要与号的情况很少,例如,在这种情况下,可以安全地删除它。