Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > устанолены ли параметры


Автор: scion 15.6.2009, 15:16
в функцию предаются переменные: $variable1, $variable2 ... etc
как в функции проверить установлено ли им в программе значение?

например:

$one=1
передаём в функцию:

check($one,$two...)
{
...
}
переменная $two не установлена. надо что бы функция ругнулась.

Автор: ginnie 15.6.2009, 15:22
scion, если я верно понимаю словосочетание "установлено значение", то решить Вашу задачу невозможно, т.к. неинициализированная переменная имеет значение undef, которое можно присвоить переменной в любое удобное время.
Пример

Код

my $var1 = 13;
check($var1, $var2, $var3); # не установлены значения переменных  var2 и var3
$var1 = undef;
check($var1, $var2, $var3); # не установлены значения переменных var1, var2 и var3

Автор: scion 15.6.2009, 15:40
Цитата(ginnie @ 15.6.2009,  15:22)
scion, если я верно понимаю словосочетание "установлено значение", то решить Вашу задачу невозможно, т.к. неинициализированная переменная имеет значение undef, которое можно присвоить переменной в любое удобное время.
Пример

Код

my $var1 = 13;
check($var1, $var2, $var3); # не установлены значения переменных  var2 и var3
$var1 = undef;
check($var1, $var2, $var3); # не установлены значения переменных var1, var2 и var3

fnx за undef... совсем забыл...
т. е. если я правильно понял то так:

!/usr/bin/perl
sub CheckVaribles {
    foreach $_ (@_){
        $i++;
        if ($_ eq undef)
        {
        print "\n: ",$i," not assigned\n";
         }

    }
}
$i=0;
$some_variable="test";
##$some_variable2="teste";
$some_variable3="0";
CheckVaribles($some_variable,$some_variable2,$some_variable3);

Это нормальный способ. или есть решения лучше?

Добавлено через 10 минут и 54 секунды
sub CheckVaribles {

как мне от сюда вытащить не значение передаваемых параметров!!! а имя переменных? которые содержат передаваемые параметры т.е. $some_variable или $some_variable2

}

CheckVaribles($some_variable,$some_variable2,$some_variable3);

Автор: scion 15.6.2009, 16:41
я конечно придумал... но останусь ли я жив после того как это кто-нибудь увидит....
я придумал засунуть все имена переменных в масив и передать в функцию в качестве нулевого параметра, а значения начиная с первого и внутни функции из распределить... в узнать какая из них undef и вывести её...

Автор: KSURi 15.6.2009, 16:51
eq undef - неверное сравнение, для этого есть функция defined.
$_ можно явно не указывать в циклах, на то она переменная по-умолчанию.
Код

sub CheckVariables {
  my $i = 0;
  for(@_) {
    print $i++, ' not defined' unless defined
  }
}


Имя переданной переменной вытащить не получится, только если не передавать аргументы в виде хэша или ссылки на него (использовать ключ в кач-ве имени переменной).

Автор: scion 15.6.2009, 17:44
народ говори что как-то можно получить аргументы функции как строку... 

Автор: ginnie 15.6.2009, 18:09
scion, как вариант, можно попробовать использовать модуль http://search.cpan.org/~nuffin/Devel-ArgNames-0.03/lib/Devel/ArgNames.pm.

Автор: scion 15.6.2009, 19:18
Цитата(ginnie @ 15.6.2009,  18:09)
scion, как вариант, можно попробовать использовать модуль http://search.cpan.org/~nuffin/Devel-ArgNames-0.03/lib/Devel/ArgNames.pm.

спасибо.

Автор: scion 15.6.2009, 20:04
кто-нибудь использовал
Devel::ArgNames
???
а то он у меня матерится... =(
Not nested deeply enough at /usr/local/share/perl/5.10.0/Devel/ArgNames.pm line 19

Автор: scion 15.6.2009, 20:20
Цитата(scion @ 15.6.2009,  20:04)
кто-нибудь использовал
Devel::ArgNames
???
а то он у меня матерится... =(
Not nested deeply enough at /usr/local/share/perl/5.10.0/Devel/ArgNames.pm line 19

всё решил. всем спасибо. вопросов по теме больше нет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)