-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)
,你为什么要放和号?(我知道它是一个子程序),但是我可以澄清一下这里的实际功能是做什么的吗?
Perl 是上下文敏感的。如果分配给标量变量
$args = @ARGV
Run Code Online (Sandbox Code Playgroud)
右侧的值在标量上下文中计算,即数组返回其大小。
在子程序调用中使用与号是 Perl 4 的习惯。如今,真正需要与号的情况很少,例如,在这种情况下,可以安全地删除它。