Я должен что-то упустить из-за присваивания переменных или сравнения строк.У меня есть скрипт, который проходит через файл с разделителями табуляции.Если только одно конкретное значение в строке не является «P», я хочу перейти к следующей строке.Код выглядит следующим образом:
1 print "Processing inst_report file...\n";
2 foreach(@inst_report_file){
3 @line=split(/\t/);
4 ($line[13] ne "P") && next;
5 $inst_report{$line[1]}++;
6 }
По какой-то причине скрипт никогда не попадет в строку 5, даже если в нем четко указаны строки с буквой "P".
Так что время отладки!
# Continuing to the breakpoint.
DB<13> c
main::(count.pl:27): ($line[13] ne "P") && next;
# Proving that this particular array element is indeed "P" with no leading or trailing characters.
DB<13> p "--$line[13]--\n";
--P--
# Proving that I'm not crazy and the Perl string comparison operator really works.
DB<14> p ("P" eq "P");
1
# Now since we've shown that $line[13] eq P, let's run that Boolean again.
DB<15> p ($line[13] eq "P")
# (Blank means FALSE) Whaaaat?
# Let's manually set $line[13]
DB<16> $line[13]="P"
# Now let's try that comparison again...
DB<17> p ($line[13] eq "P")
1
DB<18>
# Now it works. Why?
Я могу обойти это, предварительно отфильтровав входной файл, но беспокоит меня, почему это не работает.Я что-то упускаю из виду?
--- Лорен ---