[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