Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> устанолены ли параметры 
:(
    Опции темы
scion
Дата 15.6.2009, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.5.2009

Репутация: нет
Всего: нет



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

например:

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

check($one,$two...)
{
...
}
переменная $two не установлена. надо что бы функция ругнулась.
PM MAIL   Вверх
ginnie
Дата 15.6.2009, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



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

Код

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



--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
scion
Дата 15.6.2009, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.5.2009

Репутация: нет
Всего: нет



Цитата(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, 15:43
PM MAIL   Вверх
scion
Дата 15.6.2009, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.5.2009

Репутация: нет
Всего: нет



я конечно придумал... но останусь ли я жив после того как это кто-нибудь увидит....
я придумал засунуть все имена переменных в масив и передать в функцию в качестве нулевого параметра, а значения начиная с первого и внутни функции из распределить... в узнать какая из них undef и вывести её...
PM MAIL   Вверх
KSURi
Дата 15.6.2009, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



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

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


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


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
scion
Дата 15.6.2009, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.5.2009

Репутация: нет
Всего: нет



народ говори что как-то можно получить аргументы функции как строку... 
PM MAIL   Вверх
ginnie
Дата 15.6.2009, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



scion, как вариант, можно попробовать использовать модуль Devel::ArgNames.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
scion
Дата 15.6.2009, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.5.2009

Репутация: нет
Всего: нет



Цитата(ginnie @ 15.6.2009,  18:09)
scion, как вариант, можно попробовать использовать модуль Devel::ArgNames.

спасибо.
PM MAIL   Вверх
scion
Дата 15.6.2009, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.5.2009

Репутация: нет
Всего: нет



кто-нибудь использовал
Devel::ArgNames
???
а то он у меня матерится... =(
Not nested deeply enough at /usr/local/share/perl/5.10.0/Devel/ArgNames.pm line 19
PM MAIL   Вверх
scion
Дата 15.6.2009, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 13.5.2009

Репутация: нет
Всего: нет



Цитата(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

всё решил. всем спасибо. вопросов по теме больше нет.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0481 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.