Я просто ненавижу то, что метод доступа CGI::Application для объекта CGI
называется query
.
Я хотел бы, чтобы мои классы экземпляров могли использовать метод доступа с именем cgi
для получения объекта CGI
, связанного с текущим экземпляром моего подкласса CGI::Application
.
Вот самодостаточный пример того, что я делаю:
package My::Hello;
sub hello {
my $self =shift;
print "Hello @_\n";
}
package My::Merhaba;
use base 'My::Hello';
sub merhaba {
goto sub { shift->hello(@_) };
}
package main;
My::Merhaba->merhaba('StackOverflow');
Это работает так, как я думаю, и я не вижу никаких проблем (скажем, если бы я хотел наследовать от My::Merhaba
: подклассы не должны ничего знать о merhaba
).
Было бы лучше/правильнее написать
sub merhaba {
my $self = shift;
return $self->hello(@_);
}
Каковы преимущества/недостатки использования goto &NAME
для псевдонима имени метода? Есть ли способ лучше?
Примечание. Если вам хочется ответить goto
is evil, не делайте этого, потому что такое использование Perl's goto
отличается от того, что вы имеете в виду.
goto &NAME
таким образом. Оболочкаsub {}
добавляет новый фрейм в стек вызовов. Вы также можете вызвать метод напрямую. - person Michael Carman   schedule 16.02.2010can
, как в первой части ответа @Eric Strom, устраняет эту проблему, я считаю. - person Sinan Ünür   schedule 16.02.2010Method::Alias
. - person Christopher Bottoms   schedule 02.04.2010