したがって、次のコードで私がやろうとしているのは、文字列をプッシュすることです。たとえば、「この文字列」をハッシュの各キーの末尾にプッシュします。私はこれを行う方法に完全に困惑しています。これが私のコードです:
use warnings;
use strict;
use File::Find;
my @name;
my $filename;
my $line;
my @severity = ();
my @files;
my @info = ();
my $key;
my %hoa;
my $xmlfile;
my $comment;
my @comments;
open( OUTPUT, "> $ARGV[0]" );
my $dir = 'c:/programs/TEST/Test';
while ( defined( $input = glob( $dir . "\\*.txt" ) ) ) {
open( INPUT, "< $input" );
while (<INPUT>) {
chomp;
if (/File/) {
my @line = split /:/;
$key = $line[1];
push @{ $hoa{$key} }, "Filename\n";
}
if ( /XML/ ... /File/ ) {
$xmlfile = $1;
push @{ $hoa{$key} }, "XML file is $xmlfile\n";
}
if (/Important/) {
push @{ $hoa{$key} }, "Severity is $_\n";
}
if (/^\D/) {
next if /Important/;
push @{ $hoa{$key} }, "Given comment is $_\n";
}
push @{ $hoa{$key} }, "this string\n";
}
}
foreach my $k ( keys %hoa ) {
my @list = @{ $hoa{$k} };
foreach my $l (@list) {
print OUTPUT $l, "\n";
}
}
}
close INPUT;
close OUTPUT;
「この文字列」がある場所は、その文字列を配列の最後にプッシュしようとしていた場所です。しかし、最終的には、「この文字列」を 3 回出力することになり、すべてのキーの最後に表示されることはありませんでした。while()ループの外に出そうとしたら、$keyの値が初期化されていないとのことでした。それでお願いします、何か助けて?また、私が尋ねていることについて明確にする必要がある場合は、お知らせください。ありがとうございました!