alarm__ignore
以下のforeachループを実行すると、「」シグナルが表示され続けます。不思議なことに、エラーはループのさまざまな反復で表示され(つまり、3回目、26回目など)、韻や理由を特定できません。このスクリプトは、「、」をコメントアウトするとエラーなしで実行されますmy @cols = split(/\s+/, $line)
が、分割によってシグナルが発生する理由がわかりません。
コードは次のとおりです。
my @forest = ();
foreach (@treeBlobs) {
my @treeBlob = @{$_};
my $thisTree = eval {
my %tree = ();
foreach my $line (@treeBlob) {
my @cols = split(/\s+/, $line);
$tree{id++} = {map{$CLASSIFIER_COLUMNS[$_] => $cols[$_]}(0..scalar @cols-1)};
}
return \%tree;
};
print "ERROR: $@\n" if $@;
push @forest, $thisTree;
my $sc = scalar @forest;
print "FOREST: $sc; $thisTree\n";
}
そして、ここにいくつかのサンプル出力があります:
...
FOREST: 19; HASH(0x4668c90)
FOREST: 20; HASH(0x4664e10)
FOREST: 21; HASH(0x4658e30)
FOREST: 22; HASH(0x465ca80)
FOREST: 23; HASH(0x4664860)
FOREST: 24; HASH(0x4664240)
FOREST: 25; HASH(0x46740b0)
FOREST: 26; HASH(0x4667a70)
FOREST: 27; HASH(0x465cf50)
FOREST: 28; HASH(0x465cfd0)
ERROR: __alarm__ignore__(54)
FOREST: 29;
FOREST: 30; HASH(0x465ada0)
繰り返しになりますが、エラーはループの29回目の反復で常に(または通常でも)発生するとは限りません。どの反復でも発生する可能性があります。
アイデア?
ありがとう!