Thread Exporter und local (9 answers)
Opened by betterworld at 2003-09-27 20:21

betterworld
 2003-09-27 20:21
#57524 #57524
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Kann man local auch irgendwie auf Exporter-Variablen anwenden? Folgendes Beispiel illustriert das Problem:

Datei Foo.pm
Code: (dl )
1
2
3
4
5
6
package Foo;
use Exporter;
use vars qw/@ISA @EXPORT/;
push @ISA, "Exporter";
push @EXPORT, '$foovar';
$Foo::foovar = 'hallo';


Datei useFoo.pl
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
use strict;

use Foo;

{
 local $foovar = "bye"; # Zeile 6
 print "$foovar\n"; # prints bye
 print "$Foo::foovar\n"; # prints hallo
 {
   package Bar;
   use Foo;
   print "$foovar\n"; # prints hallo
 }
}


Das local wirkt sich nur auf die importierte Variable aus, nicht aber auf das Original. Es wirkt sich auch nicht auf die in Bar importierte Variable aus.
Wenn man in Zeile 6 $Foo::foovar schreiben wuerde, waere der Effekt anders herum, und in Bar hat sich nach wie vor nichts veraendert.
Kann ich irgendwie sagen, dass ich alle Versionen der Variable, also das original sowie die Importe in allen importierenden Paketen beeinflussen will? Etwa so, wie wenn ich explizit am Anfang des Blocks eine Sicherheitskopie anlegen wuerde, dann die Variable ueberschreiben und am Ende des Blocks wieder zuruecksetzen wuerde?

Danke...

Edit: ``anders herum'' soll heissen, dass die Ausgaben der ersten beiden prints vertauscht sind.\n\n

<!--EDIT|betterworld|1064679872-->

View full thread Exporter und local