Forum Webscript.Ru

Программирование => Perl => Тема начата: Phoinix от 03 Августа 2004, 20:29:21

Название: Передача переменных процедуре
Отправлено: 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)

Но есть ли возможность не заполнять этот промежуток? но при этом получать "правильный" массив?
Название: Передача переменных процедуре
Отправлено: ---===STINGER===--- от 04 Августа 2004, 00:03:06
попробуй отправить в функцию пустую переменную .. тогда получишь что ты хочешь -  если я тебя правильно понял. На мой взгляд это самый простой способ!
Название: Передача переменных процедуре
Отправлено: AnnA от 04 Августа 2004, 12:28:01
или ещё можно вот так &my_sub($var1,undef,$var3);
Приветик. ;)
Название: Передача переменных процедуре
Отправлено: Phoinix от 05 Августа 2004, 10:09:47
---===STINGER===---
Цитировать
отправить в функцию пустую переменную


AnnA
Цитировать
&my_sub($var1,undef,$var3);


Вопрос в том, что мне вообще ничего не хочется отправлять, просто, хотелось установкой нескольких запятых определить переменные по порядку в массиве...

Вообщем это не так важно, я пошел по другому пути... делов в том, что я передавал в процедуру четыре переменные, первая обязательная, из остальных трех должна присутствовать только одна, а остальные вычислялись на основе неё в процедуре, я просто добавил еще 3 процедуры в которые передаю соответствующую переменную, вычисляю остальные и передаю в основную процедуру...
Название: Передача переменных процедуре
Отправлено: Green Kakadu от 05 Августа 2004, 23:12:40
кинь переменные в хеш и передавай процедуре ссылку на него. Вариант не быстрый, но для ленивых сойдет, да и универсальный

%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};
}
Название: Передача переменных процедуре
Отправлено: Phoinix от 06 Августа 2004, 16:11:33
Green Kakadu
Нет все-таки решил не передавать пустые значания, что бы потом в процедуре не разбирать какие переменные есть а каких нет, да еще и найдется умник, который попытается передать вместо "одной из трех", две или три переменные, потом проверять их на соответсвие друг другу, а ясли соответствия нет, что выбирать наиболее понравившуюся переменную... :)

IMHO лучше не заострять премя на проверку, а просто получить и обработать...