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モジュールもオーバライドの
文法を削除すればいいと思うんだけどね。