|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 07 Jun 2002 15:04:17 To : Eugene Grosbein Subject : Re: fetchrow -------------------------------------------------------------------------------- Здравствуй, Eugene Grosbein. EG>>> if(defined(@status) && defined($status[0]) { # тут регулярно EG>>> # возникает warning (когда EG>>> # нет строк) - почему? V>> Во-первых, круглую скобку пропустил в блоке if. А во-вторых, зачем V>> проверять $status[0], если у тебя уже получается что массив есть V>> (пусть даже из одного элемента состоящий). В том случае, когда ничего V>> не вернулось, ты все равно пытаешься получить первый элемент, вот и V>> ругается правильно компилятор. EG> В общем, я переписал так: EG> if(defined(@status)) { EG> if(defined($status[0]) { EG> ... EG> } EG> } EG> И выяснил, что когда ни одной строки не возвращается, то defined(@status) EG> истинно, а проверка на defined($status[0]) выдает warning. EG> Hичего не понимаю. Еще раз: defined от массива не бывает. Массив всегда defined. Он может быть пуст или непуст. Если у тебя defined($status[0]) выдает варнинг (кстати, скобку ты опять забыл; может, все-таки это она виновата?), то if (@status && defined($status[0])). Hо по-моему, уже очень давно у перла нет проблем с тем, чтобы проверить defined от несуществующего элемента массива. -- Artem Chuprina Communiware.net RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/358.49, ICQ: 13038757 --- ifmail v.2.15dev5 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/144543decb619.html, оценка из 5, голосов 10
|