読者です 読者をやめる 読者になる 読者になる

Set::ArrayでSEGV

null

SEGVが発生してしまったのだが、どう解析をするもんだろうか?

#!/usr/bin/env perl
use strict;
use warnings;
use autodie;

use Set::Array;

my $a = Set::Array->new(1, 2, 3, 4, 5);
my $b = Set::Array->new(3, 4, 5);

#my @c = $a->difference($b); # OK
my @c = $a - $b;           # NG

print "@c", "\n";

こんな使い方で SEGVになってしまうなんて。
メソッド呼び出しは OKだけど、オーバライドした演算子では
SEGVになってしまう。ソースを見る限りは differenceが呼ばれる
だけじゃないのって思うんだけど。Set::ArrayはXSを使っている
わけではないので、Wantモジュールに問題がありそうにも思える。

Set::Arrayのテストには differenceを使うのはあるけど、
'-'演算子のテストはないですね。

Perl 5.8.9, 5.10.1, 5.12.2でSEGVが発生したのは
確認。Wantモジュールあたりから調べてみよう。


追記
Wantモジュールの want関数を使っている部分を除去すると
SEGVはでなくなりましたね。メソッド呼び出しでも同じところを
通ってそうだけど、オーバライドした場合は何か違うのだろうか?

追記2
Bug #4628 for Want: segfault in Set::Array
既知の問題だったようですね。それもだいぶ前の。overloadとWant
モジュールが相性悪いみたい。Set::Arrayモジュールもオーバライドの
文法を削除すればいいと思うんだけどね。