use strict a pouzivani spolecnych promennych bez explicitniho uvedeni baliku
Honza Pazdziora
adelton na informatics.muni.cz
Úterý Březen 12 12:44:32 MET 2002
On Tue, Mar 12, 2002 at 12:06:13PM +0100, Pavel Šmerk wrote:
>
> 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.
Je to fakt zajimave. Srovnej s
BEGIN { *{"main::x"} = \${"main::x"}; }
use strict;
$x = 1;
a s
package a;
BEGIN { *{"main::x"} = \${"main::x"}; }
package main;
use strict;
$x = 1;
a s
package main;
BEGIN { *{"main::x"} = \${"main::x"}; }
package a;
package main;
use strict;
$x = 1;
a sleduj, jak se meni chybove hlasky. Evidentne on podle typeglobu
poznava, ze se neco importovalo, a evidentne zevnitr toho package
to nechodi. Cili reseni je zda se pouzit jiny package.
> 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.
Primarni problem je v tom, ze se snazis to delat v runtime, coz
neprojde -- to je ten rozil mezi treba use a require. Ale fakt je,
ze to zda se neprochazi, ani kdyz to delam v compile time, v tom
samem package.
> Krome toho, ze me to zajima ze zvedavosti, bych chtel neco jako defined
> \&our ? our %options : jednoduse_nasimulovat_our_%options.
Pouzit $]? Nebo eval?
--
------------------------------------------------------------------------
Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
... all of these signs saying sorry but we're closed ...
------------------------------------------------------------------------
Další informace o konferenci Perl