我正在尝试根据消息类型将我的日志消息存储在哈希中,如下所示:
#!/usr/bin/perl
use strict;
use warnings;
my %log;
opendir (DIR, '.') or die $!;
while (my $file = readdir(DIR)) {
# some code to select TAR filename in $1
if (-e $1.'.tar') {
push(@{$log->{$1}}, $file); /* line 12 */
}
else {
$log{$1} = [];
push(@{$log->{$1}}, $file); /* line 16 */
}
现在这段代码给出了编译错误说:
Global symbol "$log" requires explicit package name at at lines 12 & 16
我实际上正在尝试使用哈希“%log”。有什么可能的方法来摆脱这个错误?为什么会发生这种情况?
我确实看到了一些关于上下文的解释,人们回答说变量是在一个上下文中创建并在另一个上下文中引用的,但我觉得这个变量应该在这段代码的 while 循环中可用。这只发生在我“使用严格”并且工作正常时。
我是从 Perl 开始的,所以我不完全了解基础知识!请帮助我了解为什么无法访问此变量。