为什么我从XML :: SAX :: PurePerl :: EncodingDetect得到错误,虽然我没有加载该模块?

时间:2009-08-27 05:56:49

标签: xml perl

下面是我编写的脚本,用于更改位于不同位置的XML文件中某个参数的值:

#!/usr/bin/perl -w

use Cwd;
use XML::Simple;
use Data::Dumper;
no warnings;

my $before_upgrade_value = &pre_upgrade_value;
print "Value before upgrade:: $before_upgrade_value \n";

&change_value ($before_upgrade_value);

&change_value ("America");

my $after_upgrade_value = &pre_upgrade_value;

print "Value after upgrade:: $after_upgrade_value \n";
print "Done \n";

sub pre_upgrade_value {
    my $xml = new XML::Simple;

    # read XML file
    my $input_xml  = "/usr/tmp/country/CountryConfig.xml";

    my $data = $xml->XMLin($input_xml);
    my $arg0 = $data->{COMMON}->{COUNTRY_LIST}->{Value};

    print "Arg0 is $arg0 \n";
    return $arg0;
}

sub change_value {
    my $arg0 = shift;

    my $arg1 = "ENGLAND";

    my $arg2 = "/usr/tmp/country/CountryConfig.xml";

    system("perl -pi -e 's/$arg0/$arg1/' $arg2");
}

但是我收到以下错误:

  

无法在/usr/local/lib/perl5/site_perl/5.8.7/XML/SAX/PurePerl/EncodingDetect.pm第100行识别此文档的编码。文档需要一个元素[Ln:1,Col:0 ]

你能告诉我原因,因为我没有在我的代码中调用EncodingDetect.pm吗?

2 个答案:

答案 0 :(得分:7)

XML :: Simple使用XML :: SAX。从代码:

# XML::Simple requires the services of another module that knows how to parse
# XML.  If XML::SAX is installed, the default SAX parser will be used,
# otherwise XML::Parser will be used.

XML :: SAX的一部分是XML :: SAX :: PurePerl :: EncodingDetect。听起来您在XML的开头有一些空格,您可能会发现PerlMonks node有用。

答案 1 :(得分:0)

当您使用模块时,您还使用它使用的所有模块,以及它们使用的所有模块,以及......:)