|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 09 Mar 2002 15:50:50 To : Maksim Pozdeyev Subject : Re: Use of uninitialized value -------------------------------------------------------------------------------- Здравствуй, Maksim Pozdeyev. MP> Мы к вам, профессор Artem Chuprina, и вот по какому делу... MP> 08 Мар 02 11:54, Artem Chuprina -> Maksim Pozdeyev: MP>> >>> В коде есть такая строка: if ($ARGV[0] eq "") { и т.п. MP>> >>> Use of uninitialized value in string eq at ./lc line 18. IN>>>> Канонический вариант - подстановка вида ($var||'') IN>>>> Операция '||' специально не ругается на uninitialized. IN>>>> В твоём контексте может оказаться правильным сделать IN>>>> чуть по другом, но к сожалению мои возможности не IN>>>> позволяют узнать, что же скрывается под аббревиатурой IN>>>> 'и т.п.' MP>>> Hу меня уже просветили на тему if (defined($ARGV[0]) && $ARGV[0] MP>>> eq "") MP>>> Hо это не работает, или я чей-то не понимаю. AC>> А дочитать до конца то письмо, в котором тебя об этом просветили, AC>> просветления не хватило? Пывбывав бы... MP> if (defined($ARGV[0]) || $ARGV[0] eq "") должного результато тоже не дало. А головой подумать? Hу забыл я указать еще !. Своих мозгов догадаться не хватило? MP>>> Мне нужно узнать, MP>>> передали-ли программе параметры в командной строке и если нет, то MP>>> выполнить определенные действия. AC>> В данном случае характерная идиома - unless (@ARGV). Ибо если AC>> параметров нет (и ТОЛЬКО в этом случае - если $ARGV[0] eq "", то AC>> передан один параметр, равный пустой строке) @ARGV пуст. MP> Вообщем сделал if(!defined($ARGV[0])) и все заработало без warning'ов. MP> Спасибо за помощь. И все-таки сделай как следует (unless (@ARGV)). А то потом за тобой этот код поддерживать надо будет (в том числе и тебе же самому) - без комментария и не поймешь. Потому что ты написал "если не определен первый аргумент", а имел в виду "если нет аргументов". Тот факт, что в данном случае это (если без странностей типа использования do) эквивалентно, не делает этот понятийный переход проще. -- 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/11308a1abdb86.html, оценка из 5, голосов 10
|