Web::Scraperが、「weaken is only available with the XS version of Scalar::Util」というエラーを吐いて動かなくなった

2011年12月2日 オフ 投稿者: KYO
Table of Contents

Web::Scraperが、「weaken is only available with the XS version of Scalar::Util」というエラーを吐いて動かなくなった

表題どおりなんですが、Web::Scraperが突然動かなくなっていたので、対応を行った。
原因は、Scalar::Util に依存してxs版のメソッドを使っているモジュールやアプリで、うっかり xs –> pp にバージョン変えてしまったりすると動かなくなったりする・・・とのこと。
CPANを利用しているものの、まだまだ理解が浅いので対処方法などにかなり困った。
無事解決できたので、そのメモ。

以下のURLを参考に作業を進めた。
コマンドの意味をいまひとつ理解しないままなので、まだまだ勉強が必要。
参考: ある日突然「weaken is only available with the XS version of Scalar::Util」ってメッセージと共にCatalystが起動しなくなりました
[shell]
$ sudo cpan
cpan> look Scalar::Util

$ perl Makefile.PL -XS
$ make
$ make test
$ make install
[/shell]

【参考】

$ sudo cpan

cpan shell — CPAN exploration and modules installation (v1.9800)
Enter ‘h’ for help.

cpan[1]> look Scalar::Util
Reading ‘/home/username/.cpan/Metadata’
Database was generated on Thu, 01 Dec 2011 22:28:27 GMT
Running look for module ‘Scalar::Util’

Trying to open a subshell in the build directory…
Checksum for /home/username/.cpan/sources/authors/id/G/GB/GBARR/Scalar-List-Utils-1.23.tar.gz ok
Scanning cache /home/username/.cpan/build for sizes
………………………………………………………………….DONE
/bin/tar: 4608 バイトを – から読み込み
Working directory is /home/username/.cpan/build/Scalar-List-Utils-1.23-RsBbW3
[root@ns1 Scalar-List-Utils-1.23-RsBbW3]# perl Makefile.PL -XS
Checking if your kit is complete…
Looks good
Writing Makefile for List::Util
Writing MYMETA.yml and MYMETA.json
[root@ns1 Scalar-List-Utils-1.23-RsBbW3]# make
cp lib/List/Util/XS.pm blib/lib/List/Util/XS.pm
cp lib/Scalar/Util/PP.pm blib/lib/Scalar/Util/PP.pm
cp lib/List/Util/PP.pm blib/lib/List/Util/PP.pm
cp lib/List/Util.pm blib/lib/List/Util.pm
cp lib/Scalar/Util.pm blib/lib/Scalar/Util.pm
/usr/bin/perl /usr/lib/perl5/site_perl/5.8.8/ExtUtils/xsubpp -typemap /usr/lib/perl5/5.8.8/ExtUtils/typemap ListUtil.xs > ListUtil.xsc && mv ListUtil.xsc ListUtil.c
gcc -c -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector –param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -DVERSION=\”1.23\” -DXS_VERSION=\”1.23\” -fPIC “-I/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE” -DPERL_EXT ListUtil.c
ListUtil.c: In function ‘XS_List__Util_min’:
ListUtil.xs:144: 警告: ‘retval’ may be used uninitialized in this function
Running Mkbootstrap for List::Util ()
chmod 644 Util.bs
rm -f blib/arch/auto/List/Util/Util.so
gcc -shared -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector –param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -L/usr/local/lib ListUtil.o -o blib/arch/auto/List/Util/Util.so \
\

chmod 755 blib/arch/auto/List/Util/Util.so
cp Util.bs blib/arch/auto/List/Util/Util.bs
chmod 644 blib/arch/auto/List/Util/Util.bs
Manifying blib/man3/List::Util::XS.3pm
Manifying blib/man3/List::Util.3pm
Manifying blib/man3/Scalar::Util.3pm
[root@ns1 Scalar-List-Utils-1.23-RsBbW3]# make test
PERL_DL_NONLAZY=1 /usr/bin/perl “-MExtUtils::Command::MM” “-e” “test_harness(0, ‘blib/lib’, ‘blib/arch’)” t/*.t
t/00version………..ok
t/blessed………….ok
t/dualvar………….ok
t/expfail………….ok
t/first……………ok
2/21 skipped: Poor man’s MULTICALL can’t cope
t/isvstring………..ok
t/lln……………..ok
t/max……………..ok
t/maxstr…………..ok
t/min……………..ok
t/minstr…………..ok
t/openhan………….ok
t/p_00version………ok
t/p_blessed………..ok
t/p_first………….ok
t/p_lln……………ok
t/p_max……………ok
t/p_maxstr…………ok
t/p_min……………ok
t/p_minstr…………ok
t/p_openhan………..ok
t/p_readonly……….ok
t/p_reduce…………ok
t/p_refaddr………..ok
t/p_reftype………..ok
t/p_shuffle………..ok
t/p_sum……………ok
t/p_tainted………..ok
t/proto……………ok
t/readonly…………ok
t/reduce…………..ok
2/29 skipped: Poor man’s MULTICALL can’t cope
t/refaddr………….ok
t/reftype………….ok
t/shuffle………….ok
t/stack-corruption….ok
t/sum……………..ok
t/tainted………….ok
t/weak…………….ok
All tests successful, 4 subtests skipped.
Files=38, Tests=475, 3 wallclock secs ( 2.19 cusr + 0.41 csys = 2.60 CPU)
[root@ns1 Scalar-List-Utils-1.23-RsBbW3]# make install
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
Installing /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/List/Util/Util.so
Appending installation info to /usr/lib/perl5/5.8.8/i386-linux-thread-multi/perllocal.pod

\# exit

cpan[2]> exit
Lockfile removed.