Perl 与脚本混淆

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";
}

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

在它说的下面@showstat(@filedata),为什么要放&符号? (我知道根据定义它是一个子例程),但是我可以澄清一下实际函数在这里做什么吗?

答案1

Perl 是上下文相关的。如果分配给标量变量

$args = @ARGV

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

使用 & 符号进行子例程调用是 Perl 4 的习惯。如今,只有少数情况下您真正需要&符号,例如在这种情况下,可以安全地删除它。

相关内容