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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Странный вызов подпрограммы, $temp='Calc'; 
:(
    Опции темы
Wowa
Дата 10.4.2002, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



$temp='Calc';

Как мне теперь через переменную $temp вызвать подпрограмму Calc ?
PM WWW   Вверх
*NS*
Дата 10.4.2002, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



хмм
а для чего это надо?
по подробнее объясни плз


--------------------
ну, все, что знал - рассказал...
PM MAIL   Вверх
Wowa
  Дата 10.4.2002, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Поступают скрипту некие параметры, он на них смотрит, и исходя из этого должен запускать соответствующую подпрограмму.
Для простоты понимания: name.pl?sub=edit
Вот мне и надо, глядя на $in{sub} запустить подпрограмму edit

Делать все через
if () {}
elsif {}
elsif {}
.....

не хочется.

Устроил бы вариант типа: &$in{sub};    :D  :D  :D

Есть альтернатива?


PM WWW   Вверх
*NS*
Дата 11.4.2002, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



по моему нету...
только через иф елзе...


--------------------
ну, все, что знал - рассказал...
PM MAIL   Вверх
BlackLFL
Дата 15.3.2006, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

my $temp = 'calc';
eval "&$temp();"; 

sub calc {
    print "Executing calc function!";
}

PM WWW   Вверх
tishaishii
Дата 15.3.2006, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


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

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



Нафига?

Код
my$sub='calc';
$sub->(@args);


Код
my$sub='calc';
&$sub(@args);


Код
&{
   #Ну я вообще не знаю какую подпрограмму запустить, а запущу-ка я...
   my$chego_puskat'to='?';
   if($chego_puskat'to eq '?') {
     +\'calc'
  } else {
     +\'ne_calc'
  }
}(@args);

PM MAIL ICQ Skype   Вверх
arto
Дата 15.3.2006, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

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



1. *f = "func"; f();
2. %h = ('func' => \&func); $h{'func'}();
PM MAIL ICQ   Вверх
sharq
Дата 16.3.2006, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

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



Wowa,
Цитата(Wowa @ 10.4.2002, 20:01 Найти цитируемый пост)
Поступают скрипту некие параметры, он на них смотрит, и исходя из этого должен запускать соответствующую подпрограмму.
Для простоты понимания: name.pl?sub=edit
Вот мне и надо, глядя на $in{sub} запустить подпрограмму edit

Делать все через
if () {}
elsif {}
elsif {}
.....

не хочется.

Устроил бы вариант типа: &$in{sub};    smile  smile  smile

Есть альтернатива?


Я считаю, что так не разумно!
Нужно определено писать и названия ключа и значения не должны совпадать с названиями функциями, как же безопастность??? Плюс - вдруг захочешь поменять название функции или ключа, тогда как быть?
Так что подумай, может лучше все-таки написать пару строк. smile

smile

Это сообщение отредактировал(а) sharq - 16.3.2006, 12:00


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
regis
Дата 16.3.2006, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

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



Запихнуть в хэш имена параметров в качестве ключей, и ссылки на функции -- в качестве значений.
Куда более элегантное, и проще сопровождаемое решение, чем верница if/else...
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
nitr
Дата 16.3.2006, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



См. в форуме любую замену switch/C =)


--------------------
PM   Вверх
tishaishii
Дата 18.3.2006, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


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

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



Код
calc: #подпрограммаммамма
print @args;
goto end;#конец блока подпрограмммм
#чего-то там ещё
@args=@ARGV; #аргументы для подпрограммммы из коммммандной строки.
goto $temp;
end:


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


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

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


 




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


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

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