[Vienna-pm] use strict => Geltungsbereich?
Marcel Grünauer
marcel at noug.at
Fri Mar 28 06:05:49 CST 2003
On Freitag, März 28, 2003, at 12:54 Uhr, Baier Oliver INT SD wrote:
> Ich will, wenn @ARGV definiert ist, eine andere Variable
> ($db_count) definieren, die natuerlich im Hauptprogramm
> sichtbar ist. Da ich "use strict" verwende und somit alle
> vars definieren muss, kann ich die Variable nicht mit my
> deklarieren, da sie sonst ausserhalb des if-Blocks nicht
> sichtbar ist aber auch nicht mit $::db_count, da ich sie
> sonst im Hauptprogramm erst wieder importieren muesste,
> was ich vermeiden will.
'use vars' deklariert sozusagen globale Variablen. Du kannst
aber auch die Variablen einfach außerhalb des if-Blocks definieren:
use strict;
my $db_count;
if (defined @ARGV && $ARGV[0] eq '-c') {
$db_count = 0;
...
}
print "passt\n" if defined $db_count;
In Perl 5.6.0 und höher gibt es auch das 'our'-keyword, das dasselbe
wie 'use vars' macht (siehe 'perldoc -f our'), aber in einem
lexikalischen Scope. Damit kannst Du Variablen deklarieren, die nur
im lexikalischen Scope (z.B. in einem if-Block) gültig sind, aber
die dieselbe Variable bezeichnen, wenn sie gleich heißen, auch in
unterschiedlichen Scopes. Dein obigen Beispiel würde dann also
so aussehen:
use strict;
if (defined @ARGV && $ARGV[0] eq '-c') {
our $db_count = 0;
...
}
print_it;
sub print_it {
our $db_count;
print "passt\n" if defined $db_count;
}
oder sogar
sub print_it {
print "passt\n" if defined our $db_count;
}
Marcel
More information about the Vienna-pm
mailing list