use strict a pouzivani spolecnych promennych bez explicitniho uvedeni baliku

Pavel Šmerk xsmerk na informatics.muni.cz
Úterý Březen 12 11:45:46 MET 2002


Honza Pazdziora wrote:

> Podivej se do zdrojaku Exporteru. Ten kod neni prilis elegantni (mi
> prijde) a v podstate jde o to, ze pres caller modifikuje namespace
> volajiciho (a tim vlastne exportuje).
> 
> Jenze Exporter's taky nechtel pouzit ...

Ne cely, jen tu extrahovanou flignu, kterou to dela a kterou nejsem 
schopen zreprodukovat ;-)

Ukazu to jeste na jinem priklade:

$ cat I.pm
$^W = 1;
package I;
print my $callpack = caller, "\n";
*{"${callpack}::x"} = \${"${callpack}::x"};
1;

$ perl -Mstrict -MI -we '$x = 1; print "$x\n"'
main
1

$ perl -we '*{"main::x"} = \${"main::x"}; use strict; $x = 1; print $x;'
Global symbol "$x" requires explicit package name at -e line 1.
Global symbol "$x" requires explicit package name at -e line 1.
Execution of -e aborted due to compilation errors.


Jestli tomu rozumim spravne, prvni prikaz druheho perl -... je presne to 
same, co udela vkladany balik I. Ale strict mi jednou $x sezere a jednou 
ne, jak je to mozne? Je to extrahovano z vars.pm, Exporter.pm to resi v 
podstate stejne.

Krome toho, ze me to zajima ze zvedavosti, bych chtel neco jako defined 
\&our ? our %options : jednoduse_nasimulovat_our_%options.

P.



Další informace o konferenci Perl