使用 stat 在 Perl 中获取未初始化的变量
Posted
技术标签:
【中文标题】使用 stat 在 Perl 中获取未初始化的变量【英文标题】:Getting variable uninitialized in Perl using stat 【发布时间】:2013-06-11 16:22:18 【问题描述】:我正在编写一个脚本,该脚本显示现有文件的年龄,然后在大约 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
尚未初始化。为什么会这样说?
【问题讨论】:
始终使用use strict; use warnings;
!
stat
返回一个列表,不可能返回一个数组(例如@_
)。
【参考方案1】:
您打印了@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]
返回列表的第 10 个元素 EXPR
返回,如果列表不是那么长,则返回 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);
【讨论】:
天啊!有效。所以声明它并引用 mtime 就成功了!非常感谢。这真的很有帮助。 没问题。如果这回答了您的问题,请检查它旁边的标记。欢迎使用 Stack Overflow!【参考方案2】:您正在访问数组@mtime
,但您为标量$mtime
分配了一个值。它们不是同一个变量。
如果你用过
use strict;
你会马上意识到这个问题:
Global symbol "@mtime" requires explicit package name at ...
你应该总是使用
use strict;
use warnings;
不这样做会导致你做很多额外的工作和“神秘”的错误。
【讨论】:
以上是关于使用 stat 在 Perl 中获取未初始化的变量的主要内容,如果未能解决你的问题,请参考以下文章