#!/perl -w
use strict;
use Encode qw(from_to);
system('cls');
my @str;
my $x = 0;
my @tags = ("Surname","Name","Age");
my @klassf = ("Фамилия","Имя","Возраст");
sub parseStr {
my $klsf = shift(@_);
my $match = shift(@_);
my $var = shift(@_);
if ($str[$x] =~ m/<$var>(\W+)<\/$var>/) {
from_to($klsf,"cp1251","cp866");
print "$klsf: $match\n";
}
elsif ($str[$x] =~ m/<$var>(\d+)<\/$var>/) {
from_to($klsf,"cp1251","cp866");
print "$klsf: $match\n";
}
}
open XML, "< test.xml" or die "can't find file test.xml";
while (<XML>) {
push @str, $_;
from_to($str[$x],"cp1251","cp866");
for (my $y = 0;$y <= 2;$y++) {
parseStr($klassf[$y],$1,$tags[$y]);
}
$x++;
}
close XML;
Perl, не могу найти как исправить
Код:
Результат выходит такой:
Use of uninitialized value $match in concatenation (.) or string at c:\...\test.pl line 19, <XML> line 3.
Фамилия:
Use of uninitialized value $match in concatenation (.) or string at c:\...\test.pl line 19, <XML> line 4.
Имя:
Use of uninitialized value $match in concatenation (.) or string at c:\...\test.pl line 23, <XML> line 5.
Возраст:
А вот xml:
Код:
<?xml version="1.0" encoding="windows-1251"?>
<root>
<Surname>Иванов</Surname>
<Name>Иван</Name>
<Age>23</Age>
</root>
<root>
<Surname>Иванов</Surname>
<Name>Иван</Name>
<Age>23</Age>
</root>
Все файлы тестовые но скоро придется делать скрипт для настоящих, поэтому и прошу вас помочь разобраться
XML::Simple, XML::Parser, ......
эмммм.... и $1 у тебя относительно какого regexp'а получается, подумай над этим моментом...
я бы вместо match как раз и поставил $1, а параметр match убрал бы вообще...
и еще, зачем два условия... проверка на ТОЛЬКО буквы и ТОЛЬКО цифры... валидация? или может лучше использовать (.*?) ?
Цитата: Тень Пса
возьми модуль для XML парсинга, или прям вот надо самому?
XML::Simple, XML::Parser, ......
эмммм.... и $1 у тебя относительно какого regexp'а получается, подумай над этим моментом...
я бы вместо match как раз и поставил $1, а параметр match убрал бы вообще...
и еще, зачем два условия... проверка на ТОЛЬКО буквы и ТОЛЬКО цифры... валидация? или может лучше использовать (.*?) ?
XML::Simple, XML::Parser, ......
эмммм.... и $1 у тебя относительно какого regexp'а получается, подумай над этим моментом...
я бы вместо match как раз и поставил $1, а параметр match убрал бы вообще...
и еще, зачем два условия... проверка на ТОЛЬКО буквы и ТОЛЬКО цифры... валидация? или может лучше использовать (.*?) ?
Ага, спасибо, попробую Ваши варианты. А насчет валидации: просто с regexp пока не до конца разобрался :)
ЗЫ: на твоем месте, я бы так легко не доверился ;)