[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