У меня есть файл "Application.config", который представляет собой файл Unicode (в отличие от ANSI или UTF8), который содержит что-то вроде
...
<GENERAL>
...
<FULLVERSION>18.0.13.227</FULLVERSION>
</GENERAL>
...
Следующий скрипт должен изменить это значение на 18.1.00.012 и сделал это на 32-битной Perl / OS:
my ($Company, $Config);
$Company=$ENV{ProgramData}."\\Sage\\Accounts\\2012\\Application.config";
if( -f $Company)
{
$Config='';
if(open(APPCONF, "<".$Company))
{
while(<APPCONF>)
{
$Config.=$_;
}
close(APPCONF);
}
if($Config=~s/(<.F.U.L.L.V.E.R.S.I.O.N.>.).*?(<.\/.F.U.L.L.V.E.R.S.I.O.N.>.)/\1\xfa\2/mi)
{
$Config=~s/\xfa/1\x008\x00\.\x000\x001\.\x000\x000\x00\.\x000\x001\x002\x00/mi;
if(open(APPCONF, ">".$Company))
{
binmode(APPCONF);
print APPCONF $Config;
close APPCONF;
}
}
}
Что происходит (на 64-битном Perl): «FULLVERSION» выглядит нормально, но «/ FULLVERSION» полностью искажено и выглядит как китайский.
Может кто-нибудь помочь?
Пит