解決:Scalar::Util::weakenを使おうとするとWeak references are not implementedで落ちる

Scalar::Util::weaken 使ってるスクリプトが全滅。
(略)
なんでだろーとおもってとりあえず Scalar::Util 再インストールしたら直った。
謎過ぎる。。同じバージョンだったのに。

うちでも同じ現象が発生しました。

$ perl -MScalar::Util=weaken -e 42
Weak references are not implemented in the version of perl at -e line 0
BEGIN failed--compilation aborted.
$ perl -MScalar::Util -e 'print Scalar::Util->VERSION'
1.18

CLONtypesterさんと同じく再インストールしたら直りました。

$ cpan -fi Scalar::Util
$ perl -MScalar::Util=weaken -e 42
$ perl -MScalar::Util -e 'print Scalar::Util->VERSION'
1.18
もう今さら確認はできないのですが、エラーが発生している時、Scalar/Util.pm中の「sub export_fail」が「sub import」だった気がするんです。。。本当です。。。信じてください。。。 ・・・勘違いかもしれません。。。夢でも見ていたのかも知れませんね。。。


追記:XSバージョンかどうかで挙動が変わるようです。 Mailing List Archive: Storable 2.15 on OSX 10.4 with maintperl fails "make test" 試しにXSを使わずにやってみました。まず既存のScalar::Utilをアンインストール。
$ cpan
cpan> look Scalar::Util
$ perl Makefile.PL
$ make uninstall
(unlink ...をコピペ実行)
そして、XSを使わずにテストしてみる。
$ make distclean
$ perl Makefile.PL -pm
$ make
$ perl -Mblib -MScalar::Util=weaken -e 42
Weak references are not implemented in the version of perl at - line 0
BEGIN failed--compilation aborted.
キタ━━━━ヽ(´Α` )ノ━━━━!!!! 次にXSバージョンでテストしてみる。
$ make distclean
$ perl Makefile.PL -xs
$ make
$ perl -Mblib -MScalar::Util=weaken -e 42
$
キタ━━━━ヽ(´∀` )ノ━━━━!!!! というわけで、バージョン番号が同じでもPurePerlバージョンかXSバージョンかの違いがあったということでした。 なお、Makefile.PLにオプションを指定しない場合は、Cコンパイラが利用可能であればXSになるようです。