我试图存储在根据消息类型的哈希我的日志信息,如下图所示:Perl的全局符号需要明确包名
#!/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”。什么可以成为摆脱这种错误的可能方式?为什么会发生这种情况?
我没有看到上下文里的人回答说,变量是在一个环境中创建并正在另一提到了一些解释,但我觉得这个变量应该是可用的内部循环,而在这段代码。只有当我使用“严格使用”时才会发生这种情况,否则会正常工作。
我已经开始用Perl,所以我不完全理解的基础!请帮我理解为什么这个变量不可访问。
感谢您的详细回复。我在声明中知道这个标量和非标量变量的概念。我很感谢你带来了这个! – i01000001 2013-05-01 18:13:11
那么对于完整性:'我的日志%;'声明散列,'我@log;'声明数组,'我的$ log';声明一个标量。这些是可以安全共存的三个无关变量(抛开可读性问题)。 – ikegami 2013-05-01 18:16:25
这是一个敏感的社区..从来没有见过这个其他地方..或可我一直在寻找在错误的地方..反正我已经向您提出了..并注意到对标量和非标量第二个选项!再次感谢。 – i01000001 2013-05-01 18:36:58