以下に示すように、メッセージの種類に応じて、ログ メッセージをハッシュに保存しようとしています。
#!/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 ループ内で使用できるはずだと思います。これは、「use strict」を使用している場合にのみ発生し、それ以外の場合は正常に動作します。
Perl を始めたので、基本がよくわかりません。この変数にアクセスできない理由を理解してください。