URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7539
[ Назад ]

Исходное сообщение
"Как проверить на defined сразу несколько переменных?"

Отправлено rookie , 12-Авг-08 16:32 
if (!defined $a || !defined $b || .. ) выглядит очень неуклюже. Можно как-нибудь if undefined ($a $b $c $d) { ... } ?

Содержание

Сообщения в этом обсуждении
"Как проверить на defined сразу несколько переменных?"
Отправлено arturpub , 12-Авг-08 20:04 
foreach ($a, $b, ...) { do {
    ...
} and last if not defined $_ }

sub undefined { foreach (@_) { return 1 if not defined $_ }; 0 }

можно покумекать через grep/map


да, еще в List::Util есть несколько примеров


"Как проверить на defined сразу несколько переменных?"
Отправлено qq , 12-Авг-08 21:40 
>if (!defined $a || !defined $b || .. ) выглядит очень неуклюже.
>Можно как-нибудь if undefined ($a $b $c $d) { ... }
>?

модуль List::MoreUtils

               print "At least one value undefined"
                   if any { !defined($_) } @list;

               print "All items defined"
                   if all { defined($_) } @list;


"Как проверить на defined сразу несколько переменных?"
Отправлено angra , 13-Авг-08 06:41 
Используйте обычный grep, например (!defined $a || !defined $b || .. ) заменяется на grep !defined, ($a,$b,$c).
Пример:

$ perl -le 'my ($a,$b,$c)=(0,1,2);print((grep !defined, ($a,$b,$c))?"Bad":"Good");'
Good
perl -le 'my ($a,$b,$c)=(0,1);print((grep !defined, ($a,$b,$c))?"Bad":"Good");'
Bad


"Как проверить на defined сразу несколько переменных?"
Отправлено rookie , 13-Авг-08 09:16 
>Используйте обычный grep, например (!defined $a || !defined $b || .. )
>заменяется на grep !defined, ($a,$b,$c).
>Пример:
>
>$ perl -le 'my ($a,$b,$c)=(0,1,2);print((grep !defined, ($a,$b,$c))?"Bad":"Good");'
>Good
>perl -le 'my ($a,$b,$c)=(0,1);print((grep !defined, ($a,$b,$c))?"Bad":"Good");'
>Bad

Спасибо, это то, что надо.
Спасибо всем


"Как проверить на defined сразу несколько переменных?"
Отправлено rookie , 13-Авг-08 09:42 
>Используйте обычный grep

Ещё одина близкая тема.
Как разрушить одним undef сразу несколько переменных?
Код undef ($a, $b, $c) не работает как хотелось :-(


"Как проверить на defined сразу несколько переменных?"
Отправлено angra , 13-Авг-08 23:43 
perldoc -f map :)
Функции map и grep применяются очень часто, так что стоит их освоить.