より高いスコープで変数を宣言したにもかかわらず、それを使用しようとすると、明示的なパッケージ名が必要であると言われます。コードは次のとおりです。
my $stats = {
privileges => (),
missing_users => ()
};
LINE:
while (my $line = <$fh>)
{
chomp($line);
next if $line eq "";
my $regex = "";
my $type = "";
while (($type, $regex) = each(%$entry_regex))
{
if ($line =~ /$regex/) {
if ($type eq "EXCEPTION_PRIVS")
44: {
45: push(@{$stats{privileges}}, $1);
46: next LINE;
}
私が得るエラーは次のとおりです。
グローバル シンボル "%stats" には、Import Routine Log Pars er.pl 行 45 で明示的なパッケージ名が必要です。
このエラーは発生しませんuse strict;
。削除すると、スクリプトは必要に応じて実行されます。
「より高い」スコープで宣言したので、ループ内のコードにアクセスできるはずだと思いました。このエラーが発生するのはなぜですか?