Я просто ненавижу, как 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
, зло не делает этого, потому что это использование Perl goto
отличается от того, что вы имеете в виду.