Schrift
[thread]6700[/thread]

Konstanten in Modulen



<< |< 1 2 >| >> 14 Einträge, 2 Seiten
format_c
 2005-02-13 15:43
#51657 #51657
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Hi.

Ich möchte Konfigurationsdaten in einem extra Modul auslagern und schreibgeschützt als Konstanten definieren. Wie kann ich auf diese Konstanten aus einem Anderen Modul od. Perl Skript zugreifen??

Exporter?? Aber irgendwie will es nicht so:
Code: (dl )
1
2
3
4
5
6
7
8
package mymodule;
require Exporter;
@ISA = qw(Exporter);
@EXPORT_OK = qw(NAME);

use constant NAME => 'Alex';
package main;
print NAME;

Gibt nichts aus.

Kann mir jemand mal bitte auf die Sprünge helfen?

Gruß Alex
Strat
 2005-02-13 16:40
#51658 #51658
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
constanten sind in perl subroutinen, die die gewuenschte datenstruktur zurueckgeben, d.h. sie haengen wie subroutinen in packages drinnen:
Code: (dl )
1
2
3
package main;
print mymodule::NAME, "\n";
print &mymodule::NAME, "\n";

der exporter wird, wenn ich mich recht erinnere, durch das use mymodule; aktiviert... d.h. wenn du es in eine externe datei auslagerst und das mit use laedst, muesste es eigentlich funktionieren\n\n

<!--EDIT|Strat|1108305706-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
format_c
 2005-02-13 16:52
#51659 #51659
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Danke ich habs jetzt über Module::KONSTANTE gemacht danke.

Gruß Alex
Strat
 2005-02-13 16:54
#51660 #51660
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
import muesste in derselben datei wohl auch funktionieren... das habe ich voellig vergessen... use ist ja sowas aehnliches wie BEGIN { require + import }...\n\n

<!--EDIT|Strat|1108306492-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
esskar
 2005-02-13 17:34
#51661 #51661
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ich hab festgestellt, dass "use constant" langsam ist (hab das sonst immer sehr intensiv genutzt),
deswegen bedien ich mich jetzt folgender möglichkeit:

Code: (dl )
1
2
3
4
5
6
7
package mymodule;
sub NAME { 'Alex' }
1;

package main;
print mymodule::NAME;
1;
pq
 2005-02-13 18:29
#51662 #51662
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=esskar,13.02.2005, 16:34]ich hab festgestellt, dass "use constant" langsam ist (hab das sonst immer sehr intensiv genutzt),[/quote]
hmm, hast du nen benchmark da?
Quote
deswegen bedien ich mich jetzt folgender möglichkeit:

Code: (dl )
1
2
3
4
5
6
7
package mymodule;
sub NAME { 'Alex' }
1;

package main;
print mymodule::NAME;
1;

use constant macht im prinzip nichts anderes, es ist aber noch einen
tick cleverer und macht in etwa sowas: sub NAME() { 'Alex' }

fällt dir der folgende unterschied auf?
Code: (dl )
1
2
3
4
5
6
7
perl -wle'
use constant NAME1 => 23;
sub NAME2 { 23 }
print NAME1 + 1;
print NAME2 + 1'
24
23
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pq
 2005-02-13 18:32
#51663 #51663
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
und noch was:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
perl -MO=Deparse  -wle'
use constant NAME1 => 23;
sub NAME2 { 23 }
print NAME1 + 1;
print NAME2 + 1
'
BEGIN { $^W = 1; }
BEGIN { $/ = "\n"; $\ = "\n"; }
use constant ('NAME1', 23);
sub NAME2 {
   23;
}
print 24;
print NAME2(1);
-e syntax OK

wie man an dem print 24; sehen kann, wird sowas wegoptimiert,
weshalb der aufruf von konstanten letztendlich schneller ist.\n\n

<!--EDIT|pq|1108312415-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
esskar
 2005-02-13 18:44
#51664 #51664
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=pq,13.02.2005, 17:32]wie man an dem print 24; sehen kann, wird sowas wegoptimiert,
weshalb der aufruf von konstanten letztendlich schneller ist.[/quote]
jup; der aufruf ist schneller (siehe constant.pm), aber das kompilieren dauert länger!
esskar
 2005-02-13 18:45
#51665 #51665
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=pq,13.02.2005, 17:29]tick cleverer und macht in etwa sowas: sub NAME() { 'Alex' }[/quote]
jup... vertippst!
Crian
 2005-02-14 10:55
#51666 #51666
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Hier gibts auch eine Diskussion zum Thema "projektglobaler" Variablen:

http://www.perlmonks.org/?node_id=430639\n\n

<!--EDIT|Crian|1108371344-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2005-02-13 15:43.