我正在编写一个显示现有文件年龄的脚本,然后在大约4个小时后自动将其删除(假设维护窗口)。我一直在尝试使用Perl中的stat
函数测试我的输出。我们有多个盒子,一些运行Linux和Solaris,所以这是最便携的方式。我想要获得纪元时间。
use File::stat;
$file = "samplefile";
$mtime = (stat($file))[9];
if (!defined $file){
print "No file specified\n";
exit 1;
}
printf("%d", @mtime);
我知道stat()
会返回@_
,所以我尝试将我的数据类型更改为此。但它一直回来说mtime
尚未初始化。为什么这么说?
答案 0 :(得分:6)
您打印@mtime
的内容,但是您将结果放在$mtime
中。始终使用use strict; use warnings;
。它会找到你的问题。
您的代码应如下所示:
没有File :: stat(stat
返回列表):
use strict;
use warnings;
my $file = "samplefile";
my $mtime = (stat($file))[9];
die "Can't stat file: $!\n" if !defined($mtime);
printf("%d\n", $mtime);
(EXPR)[9]
返回列表EXPR
返回的第10个元素,如果列表不长,则返回undef。这是您分配给$mtime
而非@mtime
的标量。
使用File :: stat(stat
返回一个对象):
use strict;
use warnings;
use File::stat;
my $file = "samplefile";
my $stat = stat($file);
die "Can't stat file: $!\n" if !$stat;
printf("%d\n", $stat->mtime);
答案 1 :(得分:4)
您正在访问数组@mtime
,但您为标量$mtime
指定了值。它们不是同一个变量。
如果您使用过
use strict;
你会马上意识到这个问题:
Global symbol "@mtime" requires explicit package name at ...
你应该总是使用
use strict;
use warnings;
不这样做会导致许多额外的工作和“神秘”的错误。