Ci-dessous le script que je l'ai écrit pour changer la valeur d'un des paramètres dans un fichier XML situé à un autre emplacement:Pourquoi ai-je une erreur de XML :: SAX :: PurePerl :: EncodingDetect bien que je n'ai pas chargé ce module?
#!/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");
}
Mais je reçois l'erreur suivante:
Unable to recognise encoding of this document at /usr/local/lib/perl5/site_perl/5.8.7/XML/SAX/PurePerl/EncodingDetect.pm line 100. Document requires an element [Ln: 1, Col: 0]
Pouvez-vous me dire la raison que je n'appelle pas EncodingDetect.pm dans mon code?
Ne pas utiliser '& pre_upgrade_value' pour appeler' pre_upgrade_value' à moins que vous connaissez quand utiliser '&' et quand ne pas l'utiliser. Utilisez 'pre_upgrade_value()'. Lisez 'perldoc perlsub'. Utilisez 'strict'. Utilisez 'warnings' plutôt que' -w' et essayez 'no warnings'. Évitez la notation d'objet indirect. –