Почему я получаю ошибку из XML :: SAX :: PurePerl :: EncodingDetect, хотя я не загружал этот модуль? - PullRequest
2 голосов
/ 27 августа 2009

Ниже приведен скрипт, который я написал для изменения значения одного из параметров в файле 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 ]

7 голосов
/ 27 августа 2009

XML :: SAX используется XML :: Simple. Из кода:

# 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 .

0 голосов
/ 27 августа 2009

Когда вы используете модуль, вы также используете все модули, которые он использует, и все модули, которые они используют, и ...:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...