编写一个带有一个参数(文件名或目录名)的 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 的习惯。如今,只有少数情况下您真正需要&符号,例如在这种情况下,可以安全地删除它。