Forum Webscript.Ru

Программирование => Perl => Тема начата: webser от 16 Марта 2008, 01:31:47

Название: Сравнение скаляров - не сравниваются
Отправлено: webser от 16 Марта 2008, 01:31:47
Суть:: есть цикл, где читается инфа из файла и сравниваются переменная с полученной ранее.

# поиск наименования компании
for ($i=0;$i<@list;$i++)
{
my ($tmp_id, $tmp_firm, $tmp_resume, $tmp_logo, $tmp_link) = split(/$delimiter1/,$list[$i]);

print qq!
id1 :::: $id1 | tmp_id :::: $tmp_id

!;

if ($tmp_id eq $id1) {
my $firm = $tmp_firm;
}
}

Видим ::

.................
id1 :::: 0005 | tmp_id :::: 0004
id1 :::: 0005 | tmp_id :::: 0005
id1 :::: 0005 | tmp_id :::: 0006
id1 :::: 0005 | tmp_id :::: 0007
..................

Проблема :: не происходит сравнение НИКАК - при отладочной печати видно, что переменные (0005) есть и одинаковые, а if с eq - НЕ ХОЧЕТ и my $firm - ПУСТАЯ!!! В ЧЕМ ДЕЛО?

Заранее спасибо за БЫСТРЫЙ и СКОРЫЙ ответ.

P.S. Может ModPerl глючит?

P.S.S Вот код файла, который парсим

0001#2К-аудит###
0002#3 канал###
0003#BBM###
0004#Brother###
0005#Cool Air###
0006#De\'Longhi###
0007#European Food Group###
0008#Home Net Telecom (HNT)###
0009#Imac###
0010#Incity###
Название: Сравнение скаляров - не сравниваются
Отправлено: webser от 16 Марта 2008, 13:49:10
Продолжение мытарств :::
Поставил подробную ОТЛАДОЧНУЮ печать (данные файла - те же)

my $firm ="";
for ($i=0;$i<@list;$i++)
{
my ($tmp_id, $tmp_firm, $tmp_resume, $tmp_logo, $tmp_link) = split(/$delimiter1/,$list[$i]);

print qq!
id1 :::: $id1 | tmp_id :::: $tmp_id | === | firm ::: $firm >>>>> tmp_firm ::: $tmp_firm

!;

if ($tmp_id eq $id1) {
my $firm = $tmp_firm;
print qq!
OK ::::::: id1 :::: $id1 | tmp_id :::: $tmp_id | === | firm ::: $firm >>>>> tmp_firm ::: $tmp_firm

!;
}
}
print "
firm2 = ".$firm."\\n\\n";


Результаты работы скрипта ::::

id1 :::: 0005 | tmp_id :::: 0001 | === | firm ::: >>>>> tmp_firm ::: 2К-аудит
id1 :::: 0005 | tmp_id :::: 0002 | === | firm ::: >>>>> tmp_firm ::: 3 канал
id1 :::: 0005 | tmp_id :::: 0003 | === | firm ::: >>>>> tmp_firm ::: BBM
id1 :::: 0005 | tmp_id :::: 0004 | === | firm ::: >>>>> tmp_firm ::: Brother
id1 :::: 0005 | tmp_id :::: 0005 | === | firm ::: >>>>> tmp_firm ::: Cool Air
OK ::::::: id1 :::: 0005 | tmp_id :::: 0005 | === | firm ::: Cool Air >>>>> tmp_firm ::: Cool Air
id1 :::: 0005 | tmp_id :::: 0006 | === | firm ::: >>>>> tmp_firm ::: De\'Longhi
id1 :::: 0005 | tmp_id :::: 0007 | === | firm ::: >>>>> tmp_firm ::: European Food Group
id1 :::: 0005 | tmp_id :::: 0008 | === | firm ::: >>>>> tmp_firm ::: Home Net Telecom (HNT)
id1 :::: 0005 | tmp_id :::: 0009 | === | firm ::: >>>>> tmp_firm ::: Imac
id1 :::: 0005 | tmp_id :::: 0010 | === | firm ::: >>>>> tmp_firm ::: Incity

firm2 =

ПОЧЕМУ ?????????????????????????!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Название: Сравнение скаляров - не сравниваются
Отправлено: Yaroslav от 16 Марта 2008, 16:16:58
#!/usr/bin/perl -w

open (FILE, "test.htm");
@file=;
close (FILE);

$id1=\'0005\';

foreach (@file) {
  ($tmp_id, $tmp_firm) = split(/\\#/);
  print "id1 :::: $id1 | tmp_id :::: $tmp_id\\n";
  if ($tmp_id eq $id1) { $firm = $tmp_firm; }
}
print "FIRM = $firm !!!";


id1 :::: 0005 | tmp_id :::: 0001
id1 :::: 0005 | tmp_id :::: 0002
id1 :::: 0005 | tmp_id :::: 0003
id1 :::: 0005 | tmp_id :::: 0004
id1 :::: 0005 | tmp_id :::: 0005
id1 :::: 0005 | tmp_id :::: 0006
id1 :::: 0005 | tmp_id :::: 0007
id1 :::: 0005 | tmp_id :::: 0008
id1 :::: 0005 | tmp_id :::: 0009
id1 :::: 0005 | tmp_id :::: 0010
FIRM = Cool Air !!!
Название: Сравнение скаляров - не сравниваются
Отправлено: webser от 16 Марта 2008, 16:26:54
ФАНТАСТИКА - РАБОТАЕТ !!!

И почему у меня не работало? Что-бы избежать ошибок в будущем - вроде ТО ЖЕ самое делал!