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