下面是我编写的脚本,用于更改位于不同位置的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吗?
答案 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)
当您使用模块时,您还使用它使用的所有模块,以及它们使用的所有模块,以及......:)