Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > Новичек: В чем моя ошибка? |
Автор: Mikhail0s 15.7.2005, 21:20 |
Пишу для себя скрипт, который достает необходимую мне информацию из файлов програмы собирающую разнообразные характеристики компьютеров в локальной сети (програма Everest). Файлы длиной порядка 2000 строк. Проблема возникает при отработке такой части скрипта: sub getSoftwareInstalled { $audit_data_file_name = $_[0]; #<-имя обрабатываемого файла open (AUDIT_DATA_FILE, "$audit_data_file_name") or die ("Error:$!"); #<-открываю поток while (my $line = <AUDIT_DATA_FILE>) { if ($line =~ m/^ProductName=(.+)/i){ #<-То, что мне необходимо push (@software_items, $1); #<-Отправляю в массив } } foreach $software_item (@software_items){print $software_item, "\n";} #<-!!!ОШИБКА ЗДЕСЬ*** } При выводе perl в том числе, среди выводимых строк (правильных) выдает: [cut] Ad-aware 6 Personal Use of uninitialized value in print at C:\Perl\SCRIPS\audir_data\audit_data_alt.pl line 49, <AUDIT_DATA_FILE> line 4292. Canon CAPT printers [cut] Когда прохожу debug'ом - всё ок - каждый элемент массива заполнен значением. Если перед print поставить spleep (1); (да, да, я не програмист, как умею, так и делаю), то всё выводится без этой ошибки. Соответственно прошу, по возможности, не дать дураком умереть... PS. Activestate. W2k3 (XP). |
Автор: sharq 16.7.2005, 00:42 | ||
Mikhail0s если файл открыл, не забудь его закрыть! используй use strict и проблем не будет. Вот отлаженный пример:
![]() |
Автор: korob2001 16.7.2005, 00:56 | ||
|
Автор: Mikhail0s 16.7.2005, 08:28 |
Да, конечно, я использую и strict и warnings. Но закрытие потока, как я проверил - не решает эту проблему (к сожалению). Как я выяснил - это проблема Activestate Komodo. Из командной строки нет никаких ошибок. Ни на win ни на bsd. Буду писать им багрепорт - дором, чтоли я у них ide увёл ![]() Всем большое спасибо. |
Автор: korob2001 16.7.2005, 11:37 | ||
А зачем создаёшь второй цикл, он же у тебя просто выводит записи, которые ты отобрал в первом цикле? Попробуй вместо того, что бы забивать массив теми записями, которые соответствуют шаблону, выводить сразу их в STDUOT, т.е. :
Удачи. |
Автор: Mikhail0s 16.7.2005, 13:26 |
Создаю второй цикл для вывода только в целях отладки. Чтобы визуализировать то, что я там напрограммировал. |