XML::Simpleのインストールでエラーになる場合の対処
PerlのXML::Simpleのインストールでエラーになる場合の対処方法を紹介します。
モジュールはyum等ではなく、makeでインストールしています。
1.問題点
XML::Simpleをインストールしましたが、エラーになります。
下記のスクリプトを実行します。
#!/usr/bin/perl
use XML::Simple;
$file = './test.xml';
my $data = XMLin($file);
実行結果
# ./test.pl
XMLin() requires either XML::SAX or XML::Parser at ./test.pl line 6
XML::Simple called at ./test.pl line 6
ということで、PerlのXML::Simpleのインストールでエラーになる場合の対処方法を紹介します。
2.対処
エラーの内容より、XML::SAXまたはXML::Parserが必要みたいなのでインストールします。
なおXML::Parserはexpat-develのインストールが必要なようです。ここではXML::SAXをインストールします。
https://metacpan.org/pod/XML::Parser
からtar.gzファイルをダウンロードして展開し、
# perl Makefile.PL
でMakefileを生成します。
# make
cp lib/XML/SAX/PurePerl/EncodingDetect.pm blib/lib/XML/SAX/PurePerl/EncodingDetect.pm
cp lib/XML/SAX/PurePerl/Reader/UnicodeExt.pm blib/lib/XML/SAX/PurePerl/Reader/UnicodeExt.pm
cp lib/XML/SAX/PurePerl/Reader/Stream.pm blib/lib/XML/SAX/PurePerl/Reader/Stream.pm
:
Manifying blib/man3/XML::SAX::PurePerl.3pm
Manifying blib/man3/XML::SAX::DocumentLocator.3pm
# make install
Installing /usr/local/share/perl5/XML/SAX.pm
Installing /usr/local/share/perl5/XML/SAX/Intro.pod
Installing /usr/local/share/perl5/XML/SAX/ParserFactory.pm
:
Can't locate XML/SAX/Exception.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/local/share/perl5/XML/SAX/ParserFactory.pm line 12.
BEGIN failed--compilation aborted at /usr/local/share/perl5/XML/SAX/ParserFactory.pm line 12.
Compilation failed in require at /usr/local/share/perl5/XML/SAX.pm line 18.
BEGIN failed--compilation aborted at /usr/local/share/perl5/XML/SAX.pm line 18.
Compilation failed in require.
BEGIN failed--compilation aborted.
make: *** [install_sax_pureperl] エラー 2
エラーが発生したので、さらにXML/SAX/Exception.pm(XML-SAX-Base-1.09)をインストールします。
https://metacpan.org/pod/XML::SAX::Exception
からtar.gzファイルをダウンロードして展開し、
# perl Makefile.PL
でMakefileを生成します。
# perl Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for XML::SAX::Base
# make
cp BuildSAXBase.pl blib/lib/XML/SAX/BuildSAXBase.pl
cp lib/XML/SAX/Base.pm blib/lib/XML/SAX/Base.pm
cp lib/XML/SAX/Exception.pm blib/lib/XML/SAX/Exception.pm
Manifying blib/man3/XML::SAX::Base.3pm
Manifying blib/man3/XML::SAX::BuildSAXBase.3pm
Manifying blib/man3/XML::SAX::Exception.3pm
# make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/00basic.t ............. ok
t/01exception.t ......... ok
t/01simpledriver.t ...... ok
:
t/16gethandlers.t ....... ok
t/release-pod-syntax.t .. skipped: these tests are for release candidate testing
All tests successful.
Files=19, Tests=137, 1 wallclock secs ( 0.09 usr 0.03 sys + 0.50 cusr 0.09 csys = 0.71 CPU)
Result: PASS
# make install
Installing /usr/local/share/perl5/XML/SAX/Exception.pm
Installing /usr/local/share/perl5/XML/SAX/Base.pm
Installing /usr/local/share/perl5/XML/SAX/BuildSAXBase.pl
Installing /usr/local/share/man/man3/XML::SAX::BuildSAXBase.3pm
Installing /usr/local/share/man/man3/XML::SAX::Base.3pm
Installing /usr/local/share/man/man3/XML::SAX::Exception.3pm
Appending installation info to /usr/lib64/perl5/perllocal.pod
XML-SAX-Baseインストール後に再度XML-SAXのmake testを実施します。
# make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/00basic.t ....... Can't locate XML/NamespaceSupport.pm in @INC (@INC contains: /root/hoge/XML-SAX-1.02/blib/lib /root/hoge/XML-SAX-1.02/blib/arch /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /root/hoge/XML-SAX-1.02/blib/lib/XML/SAX/PurePerl.pm line 20.
エラーが発生したので、さらにXML/NamespaceSupport.pmをインストールします。
https://metacpan.org/pod/XML::NamespaceSupport
からtar.gzファイルをダウンロードして展開し、
# perl Makefile.PL
でMakefileを生成します。
# perl Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for XML::NamespaceSupport
# make
cp lib/XML/NamespaceSupport.pm blib/lib/XML/NamespaceSupport.pm
Manifying blib/man3/XML::NamespaceSupport.3pm
# make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/00base.t .. ok
All tests successful.
Files=1, Tests=49, 0 wallclock secs ( 0.03 usr 0.01 sys + 0.02 cusr 0.00 csys = 0.06 CPU)
Result: PASS
# make install
Installing /usr/local/share/perl5/XML/NamespaceSupport.pm
Installing /usr/local/share/man/man3/XML::NamespaceSupport.3pm
Appending installation info to /usr/lib64/perl5/perllocal.pod
XML-NamespaceSupportインストール後に再度XML-SAXのmake testを実施します。
# make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/00basic.t ....... ok
t/01known.t ....... ok
t/10xmldecl1.t .... ok
:
t/42entities.t .... ok
t/99cleanup.t ..... ok
All tests successful.
Files=16, Tests=113, 2 wallclock secs ( 0.08 usr 0.03 sys + 1.60 cusr 0.18 csys = 1.89 CPU)
Result: PASS
# make install
Appending installation info to /usr/lib64/perl5/perllocal.pod
could not find ParserDetails.ini in /usr/local/share/perl5/XML/SAX
これでインストールでき、冒頭のスクリプトも正常に動作しました。
- Perlでansibleライブラリを作成する方法
- perlのCPANモジュールからRPMを作成する方法
- Perlで「Subroutine permission redefined at~」を抑止する方法
- YAML::Tinyで「YAML::Tiny found bad indenting in line~」というエラーになる場合の対処
- Perlの正規表現を使って文字列をまとめて取得する方法
- Perlのハッシュでキーの有無を調べる方法
- perlで配列の途中の要素を削除する方法
- YAML::Tinyでコロンを利用する方法
- Perlで改行コードがCRのファイルを読み込む方法
- Perlで「Possible precedence issue with control flow operator」という警告の対処
- PerlのLWPで「Can't verify SSL peers without knowing which Certificate Authorities to trust」というエラーになったときの対処
- Perl+Windowsでファイルを再帰的にリネームする方法
- Perlプログラムの中でファイルの一部を書き換える方法
- Perlの「Bareword "%s" not allowed while "strict subs" in use~」というエラーについて
- Perlで文字列結合しながらs///演算子で置換する方法