Schrift
[thread]11820[/thread]

Variablen und mehrere BEGIN-Blöcke

Leser: 1


<< >> 6 Einträge, 1 Seite
RalphFFM
 2008-05-17 12:33
#109835 #109835
User since
2006-11-16
258 Artikel
BenutzerIn
[Homepage] [default_avatar]
Guten Morgen,

ein stark gekürztes Beispiel meines ersten Versuchs:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl
use warnings;
use strict;
BEGIN {
    our $var = "Hallo";
}
# Anstelle dieses Kommentars steht ein Programmteil
BEGIN {
    print "$var Welt\n";
}
# Es folgen restliche Programmteile
__END__

Variable "$var" is not imported at /tmp/ende line 9.
Global symbol "$var" requires explicit package name at /tmp/ende line 9.
BEGIN not safe after errors--compilation aborted at /tmp/ende line 10.

Ein "Hallo Welt" soll ausgegeben werden. Das scheint allerdings nur dann zu funktionieren wenn ich die $var-Zuweisung in den zweiten BEGIN-Block mit rein nehme, was aber unerwünscht ist. $var soll eine Konfigurationsvariable sein, die ich gerne vorne bei den Konfig-Variablen definieren möchte, und im (zweiten) BEGIN-Block verwenden möchte. Wie macht man's besser?
Gast Gast
 2008-05-17 13:19
#109836 #109836
Außerhalb des Blocks definieren.
Code (perl): (dl )
1
2
3
4
5
6
7
8
use strict;
use warnings;
our $var;
BEGIN { 
   $var="HELLO"; }
#
BEGIN { 
   print $var; }
Gast Gast
 2008-05-17 13:27
#109837 #109837
Mit my() kannste sie auch außerhalb deklarieren, dann kann man nicht von aussen drauf zugreifen.
RalphFFM
 2008-05-17 14:12
#109839 #109839
User since
2006-11-16
258 Artikel
BenutzerIn
[Homepage] [default_avatar]
Prima, das nach Beitrag 2 funktioniert. Danke!
Betreffend Beitrag 3 weiß ich nicht wie Gast das gemeint hat?
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl
use warnings;
use strict;
my $var;
BEGIN {
    $var = "Hallo";
}
BEGIN {
    print "$var Welt\n";
}
print "$var\n";
__END__
Hallo Welt
Hallo
pq
 2008-05-17 14:20
#109840 #109840
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
RalphFFM+2008-05-17 12:12:07--
Prima, das nach Beitrag 2 funktioniert. Danke!
Betreffend Beitrag 3 weiß ich nicht wie Gast das gemeint hat?

ganz einfach, wenn du my benutzt, kannst du nicht ausserhalb der datei drauf zugreifen.

schreib den code mit our mal in eine foo.pm und mach folgendes:
Code: (dl )
1
2
3
4
perl -wle'
use foo;
our $var;
print "outer: $var"'

du wirst sehn, dass $var hier immer noch den wert 'Hallo' hat.
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
RalphFFM
 2008-05-17 14:57
#109841 #109841
User since
2006-11-16
258 Artikel
BenutzerIn
[Homepage] [default_avatar]
Achso von außerhalb _der Datei_ war gemeint. Ich hatte die Formulierung "nicht von außen drauf zugreifen" interpretiert i.S. von "nicht von außerhalb _der BEGIN-Blöcke_ drauf zugreifen", ...
<< >> 6 Einträge, 1 Seite



View all threads created 2008-05-17 12:33.