Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl: вопрос по перезагрузке функции / 3 сообщений из 3, страница 1 из 1
14.09.2013, 13:05
    #38396683
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl: вопрос по перезагрузке функции
Не уверен, что это именно перезагрузка, но не знаю, как правильно назвать.
Есть довольно большая система на Perl. В системе есть модуль Navigator.pm, который используется в очень многих местах. Менять поведение модуля крайне нежелательно, т.к. нельзя предусмотреть все места, откуда он может вызываться (система периодически обновляется и не рассчитана на изменение базовых модулей).
В коде модуля есть такая функция:
Код: php
1.
2.
3.
4.
5.
6.
sub navi
{
    my $cgi = shift;
    my $dbh = shift;
    my %params = @_;
...



По ряду причин меня эта функция не устраивает. В основном потому, что в нее не передается контекст авторизации, а я хочу добавить в модуль поведение, которое зависит от этого контекста. У меня эта функция должна выглядеть так:
Код: php
1.
2.
3.
4.
5.
6.
sub navi
{
    my ($auth,$cgi,$dbh,%params);
    if (scalar(@_) == 1)  { $auth = shift; $cgi = $auth->cgi(); $dbh = $auth->dbh(); ... }
    else                  { $cgi = shift; $dbh = shift; %params = @_; }
...



Достаточно ли такой подстраховки?

________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
14.09.2013, 13:15
    #38396690
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl: вопрос по перезагрузке функции
Собственно это продолжение темы http://www.sql.ru/forum/894357
Решение работает, но мне оно не нравится, в основном по причине того, что я ориентируюсь на число аргументов (если мне нужно будет кроме $auth передать еще какие-то аргументы, то это сделать не получится).
Можно ли как-то проверить тип аргумента, желательно узнать его класс? Контекст авторизации в коде обычно создается примерно так: $auth = new Operator::Auth(...).
...
Рейтинг: 0 / 0
16.09.2013, 21:36
    #38398149
Warstone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl: вопрос по перезагрузке функции
ref. Но он вам даст HASH.
Вам сюда: http://search.cpan.org/~rjbs/perl-5.18.1/lib/UNIVERSAL.pm
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl: вопрос по перезагрузке функции / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]