Forum Webscript.Ru
Программирование => Perl => Тема начата: Phoinix от 03 Августа 2004, 20:29:21
-
Возникла такая проблема:
передаю процедуре переменные:
&my_sub($var1,$var2,$var3);
Получаю в процедуре в массиве
@_ = ($var1,$var2,$var3)
но если я опускаю какую либо переменную, то количество элементов массива уменьшается:
&my_sub($var1,,$var3);
@_ = ($var1,$var3)
т.е. промежуток между запятыми должен быть хоть чем-то заполнен:
&my_sub($var1,\'\',$var3);
@_ = ($var1,\'\',$var3)
Но есть ли возможность не заполнять этот промежуток? но при этом получать "правильный" массив?
-
попробуй отправить в функцию пустую переменную .. тогда получишь что ты хочешь - если я тебя правильно понял. На мой взгляд это самый простой способ!
-
или ещё можно вот так &my_sub($var1,undef,$var3);
Приветик. ;)
-
---===STINGER===---
отправить в функцию пустую переменную
AnnA
&my_sub($var1,undef,$var3);
Вопрос в том, что мне вообще ничего не хочется отправлять, просто, хотелось установкой нескольких запятых определить переменные по порядку в массиве...
Вообщем это не так важно, я пошел по другому пути... делов в том, что я передавал в процедуру четыре переменные, первая обязательная, из остальных трех должна присутствовать только одна, а остальные вычислялись на основе неё в процедуре, я просто добавил еще 3 процедуры в которые передаю соответствующую переменную, вычисляю остальные и передаю в основную процедуру...
-
кинь переменные в хеш и передавай процедуре ссылку на него. Вариант не быстрый, но для ленивых сойдет, да и универсальный
%goga = ( \'var1\'=>$var1, \'var2\' =>$var2, \'var3\'=>$var3);
&my_sub(\\%goga);
sub my_sub {
my $ref_hash=shift;
map { print "$_ : $ref_hash->{$_}\\n" } keys %{$ref_hash};
}
-
Green Kakadu
Нет все-таки решил не передавать пустые значания, что бы потом в процедуре не разбирать какие переменные есть а каких нет, да еще и найдется умник, который попытается передать вместо "одной из трех", две или три переменные, потом проверять их на соответсвие друг другу, а ясли соответствия нет, что выбирать наиболее понравившуюся переменную... :)
IMHO лучше не заострять премя на проверку, а просто получить и обработать...