0

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回目の反復で常に(または通常でも)発生するとは限りません。どの反復でも発生する可能性があります。

アイデア?

ありがとう!

4

1 に答える 1