Ошибка сегментации в приведенной ниже программе - PullRequest
3 голосов
/ 05 ноября 2019

Код ниже вызывается из простого скрипта, подобного этому. $ test.line-validation ();

    method line-validation is rw {
    my $file-data = slurp($!FileName, enc => "iso-8859-1");
    my @lines = $file-data.lines;
    my $start = now;
    for @lines -> $line {
        state $i = 1;
        my @splitLine = split('|', $line);
        if ($line.starts-with("H|") || $line.starts-with("T|")) {
            next;
        }
        my $lnObject = LineValidation.new( line => $line, FileType => $.FileType );
        $lnObject.ColumnIds = %.ColumnIds;
        my @promises;
        my @validationIds;
        for %.ValidationRules.keys -> $validationId {
            if (%.ValidationRules{$validationId}<ValidationType> eq 'COLUMN') {
                push @promises,  start {$lnObject.ColumnValidationFunction(%.ValidationRules{$validationId}<ValidationFunction>, %.ValidationRules{$validationId}<Arguments>, $.ValidationRules{$validationId}<Description>); 1};
                push @validationIds, $validationId;
            }
        }
        my @promise-output = await @promises;
        for @validationIds -> $valId {
            state $j = 0;
            my $result = @promise-output[$j];
            if ($result.Bool == True) {
                if (%.ResultSet{$valId}<count> :!exists) {
                    %.ResultSet{$valId}<count> = 1;
                } else {
                    %.ResultSet{$valId}<count> = %.ResultSet{$valId}<count> + 1;
                }
                my @prCol = (%.ValidationRules{$valId}<Arguments><column>, @.printColumns);
                if (%.ResultSet{$valId}<count> <= 10) {
                    %.ResultSet{$valId}.push: (sample => join('|', @splitLine[@prCol[*;*]].map: { if ($_.Bool == False ) { $_ = ''} else {$_ = $_;} }));
                }
                %.ResultSet{$valId}<ColumnList> = @prCol[*;*];
            }
            $j++;
        }
        $i++;
    }
    say "Line validation completed in {now - $start } time for $.lineCount lines";
}

Раньше код работал нормально, но при запуске с использованием больших файлов он просто произвольно выдает ошибку Segmentation fault и существует. Я не могу определить, где это терпит неудачу либо.

...