[Warszawa-pm] Czego nie lubimy w Perlu?
Piotr Roszatycki
piotr.roszatycki w gmail.com
Pon, 19 Lip 2010, 03:02:42 PDT
No właśnie nie bardzo, bo to nie to samo.
W przypadku Package::Alias, czy też konstrukcji *Alias = \*Oryginal
wywołując metodę dostaniesz jako pierwszy parametr nie Oryginal ale niestety
Alias:
$ perl -ale 'sub oryginal::m { print @_ }; *alias:: = \*oryginal::;
oryginal->m(); alias->m() '
oryginal
alias
To czym to się różni od zwykłego dziedziczenia?
$ perl -ale 'sub oryginal::m { print @_ }; @alias::ISA=qw(oryginal);
oryginal->m(); alias->m() '
oryginal
alias
Dla odmiany tak powinien działać prawdziwy mechanizm namespace:
$ perl -al << 'END'
> use B::Generate;
> use B::OPCheck entersub => check => sub {
> my ($unop) = @_;
> if ($unop->first->sibling->sv->PV eq "alias") {
> my $sv = B::svref_2object(\("oryginal"));
> $unop->first->sibling->sv($sv->sv);
> };
> };
>
> sub oryginal::m { print @_ };
>
> oryginal->m();
> alias->m();
> END
oryginal
oryginal
No i właśnie coś takiego chciałbym mieć :)
W dniu 19 lipca 2010 10:40 użytkownik piotr pogorzelski <pp w webtel.pl>napisał:
> -------- Original Message --------
> Subject: Re: [Warszawa-pm] Czego nie lubimy w Perlu?
> From: Piotr Roszatycki <piotr.roszatycki w gmail.com>
> To: warszawa-pm w pm.org
> Date: Sun Jul 18 2010 12:35:55 GMT+0200 (CET)
>
> Hmm przypomniało mi się, czego jeszcze bardzo nie lubię w perlu. To brak
>> sensownej obsługi namespace, przez co trzeba pisać za każdym razem
>> Bardzo::Dlugie::Sciezki::Do::Wlasnych::Modulow. A wystarczyłoby coś w
>> stylu:
>>
>> namespace Bardzo::Dluga::Sciezka;
>> Modul->new;
>>
>> (...)
>
> use Package::Alias BDS => 'Bardzo::Dluga::Sciezka';
>
>
--
.''`. Piotr Roszatycki
: :' : mailto:Piotr.Roszatycki w gmail.com
`. `' mailto:dexter w debian.org
`-
-------------- następna część ---------
Załącznik HTML został usunięty...
URL: <http://mail.pm.org/pipermail/warszawa-pm/attachments/20100719/3a8c1eb2/attachment.html>
Więcej informacji o liście Warszawa-pm