コードがセグメンテーション違反を引き起こさない 2 つのケースがあります。
- 少なくとも 1 つの場所でSmart::Commentsを使用する場合
- デバッガーを実行します。
私はそれをこの呼び出しまで追跡しました:
$action->{breakdown}
= join( ' '
, each_pair {
my ( $name, $length ) = @_;
return "x$length" if $name eq 'FILLER';
push @$field_list_ref, $name;
return "A$length";
} @$field_def_ref
);
whereeach_pair
は別のモジュールで次のように定義されています。
sub each_pair (&@) {
my $block = shift;
return unless @_;
my $caller = caller();
my $aref = qualify( 'a', $caller );
my $bref = qualify( 'b', $caller );
my @results;
my $pairs = 0;
for ( my $index = 0; $index < $#_; $index += 2 ) {
$pairs++;
my @pair = @_[$index..($index+1)];
no strict 'refs';
local ( $$aref, $$bref ) = @pair;
push @results, $block->( @pair );
}
return wantarray || $pairs != 1 ? @results : shift @results;
}
- each_pair をList::MoreUtils::natatimeに置き換えるだけでよいことがわかりました(ただし、これにはいくつかのバグがあると聞きました)。彼らは最近、このモジュールを私たちの環境に許可しました。セグメンテーション違反 -- またはデバッグ セグメンテーション違反による他の Perl プログラマー。
私はこれで少し時間を失いました。
編集
私はこの関数を使用する他のモジュールを持っています.andを使用できると期待する人$a
も$b
います.また、同じモジュール内の別の場所で別のリストのために機能しています. この呼び出しを変更することも、このファイルに対して変更することもできますが、それを正常に使用するすべての場所で変更することは、おそらく、この遅い時間に許可されているよりも多くの変更です。