/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
At kommunikere en variable til modul.
Fra : Mads Orbesen Troest


Dato : 26-02-01 14:14

Hej;

Jeg har et problem:

Jeg har behov for at kommunikere en variabel fra et Perl-script til et
importeret modul, således at modulet kender variablen og kan reagere på den
/under/ importeringen, ikke efter.

I stil med følgende, der dog ikke virker:

#!/usr/bin/perl
# Main.pm
$testMod::whichConfig = "myConfig";
use testMod;
# eof

# testMod.pm
package testMod;
print "æske" if( $testMod::whichConfig eq 'trold' );
return 1;

Problemet er, at selv om jeg eksplicit sætter variablen whichConfig i
testMod's namespace, så kan den ikke læses inde fra testMod under importen.
Jeg har også forsøgt at sætte variablen i root-namespace ($::whichConfig)
begge steder; med samme resultat. Hvordan kan jeg ellers få overført
information til et modul, som det skal reagere på allerede under importen?

På forhånd tak,
/\/\\ads Orbesen Troest

(Please remove NEVERMORE from email address; spam shall bug me ... never
more!)



 
 
Henrik Tougaard (26-02-2001)
Kommentar
Fra : Henrik Tougaard


Dato : 26-02-01 14:51


"Mads Orbesen Troest" <mads@loxodonte.NEVERMORE.dk> skrev i en meddelelse
news:KAsm6.19680$TL6.1073025@news000.worldonline.dk...
> Hej;
>
> Jeg har et problem:
>
> Jeg har behov for at kommunikere en variabel fra et Perl-script til et
> importeret modul, således at modulet kender variablen og kan reagere på
den
> /under/ importeringen, ikke efter.

Det du bliver snydt af er at use bliver udført på compileringstidpunktet,
mens din tildeling til variablen først sker på køretidspunktet.

Du skal altså lave noget i stil med:

#!/usr/bin/perl
# Main.pm
BEGIN {$testMod::whichConfig = "myConfig";}
use testMod;
# eof

# testMod.pm
package testMod;
print "æske" if( $testMod::whichConfig eq 'trold' );
return 1;

(der vist burde virke modulo et par småfejl .

Det er altid drilsk at overføre noget til modulerne på import-tidspunktet -
overvej grundtigt om du *virkelig* har behov for det. Du kunne jo evt.
definere en funktion, der senere kan kaldes og som så kender værdierne....

---
mvh Henrik Tougaard, htoug@cpan.org



Mads Orbesen Troest (26-02-2001)
Kommentar
Fra : Mads Orbesen Troest


Dato : 26-02-01 15:06

Hej;

> Det du bliver snydt af er at use bliver udført på compileringstidpunktet,
> mens din tildeling til variablen først sker på køretidspunktet.

OK, det er jo egentlig klart nok nu hvor nogen har sagt det.

> Du skal altså lave noget i stil med:
> BEGIN {$testMod::whichConfig = "myConfig";}

Tak for tippet.

> Det er altid drilsk at overføre noget til modulerne på
import-tidspunktet -
> overvej grundtigt om du *virkelig* har behov for det. Du kunne jo evt.
> definere en funktion, der senere kan kaldes og som så kender værdierne....

Jeg er godt klar over at det ikke er elegant. Grunden til at jeg ønsker at
gøre det er ease-of-use: jeg har lavet et Configure modul, der læser og
parser en konfigurationsfil, således at config-filen er tilgængelig i en
global hash med det samme, så snart man har importeret modulet. I 99%
tilfælde hedder konfigurationsfilen det samme, men jeg ville give muligheden
for at overstyre filnavnet hvis det skulle vise sig nødvendigt på et
tidspunkt.

Tak igen,
/\/\\ads Orbesen Troest

(Please remove NEVERMORE from email address; spam shall bug me ... never
more!)



Lars Balker Rasmusse~ (26-02-2001)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 26-02-01 15:49

"Mads Orbesen Troest" <mads@loxodonte.NEVERMORE.dk> writes:
> Jeg er godt klar over at det ikke er elegant. Grunden til at jeg ønsker at
> gøre det er ease-of-use: jeg har lavet et Configure modul, der læser og
> parser en konfigurationsfil, således at config-filen er tilgængelig i en
> global hash med det samme, så snart man har importeret modulet. I 99%
> tilfælde hedder konfigurationsfilen det samme, men jeg ville give muligheden
> for at overstyre filnavnet hvis det skulle vise sig nødvendigt på et
> tidspunkt.

foo.pl:

#!/usr/bin/perl
use testMod ("myConfig");

testMod::foo;

testMod.pm:

package testMod;
my $whichConfig;

sub import {
$whichConfig = $_[1];
}

sub foo {
print "æske" if( $whichConfig eq 'myConfig' );
}

1;

--
Lars Balker Rasmussen "Special is bad."

Mads Orbesen Troest (27-02-2001)
Kommentar
Fra : Mads Orbesen Troest


Dato : 27-02-01 10:09

> use testMod ("myConfig");
> sub import {
> $whichConfig = $_[1];
> }

Jamen, det var jo lige meget mere elegant.

Tak for tippet,
/\/\\ads Orbesen Troest




Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408943
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste