zurückInhaltzurück Perl Einführung: Subroutinen: Lokale Variablen

11.4. Subroutinen: Lokale Variablen

Wenn man umfangreichere Skripte schreibt, kommt es schnell vor, daß man die gleichen Variablennamen mehrfach benutzt. Hierbei kann es leicht zu unerwuenschten Effekten kommen.

Beispiel:

# Hauptprogramm 

$a = 120;
$b = 40;

print "\$a hat im Hauptprogramm den Wert $a\n";
print "\$b hat im Hauptprogramm den Wert $b\n";

&schleife();

print "\$a hat im Hauptprogramm den Wert $a\n";
print "\$b hat im Hauptprogramm den Wert $b\n";

# Unterroutinen

sub schleife {
  print "---Subroutine Schleife wird aufgerufen\n";
  for ($a = 0;$a < 5;$a++) {
    print "\$a hat in der Subroutine den Wert $a\n";
  }	
}

Nachdem die Subroutine schleife aufgerufen wurde, hat sich der Wert der Variablen $a von 120 auf 5 verändert.

Wie kannst Du dies nun umgehen?

Bisher wurden in unseren Beispielen nur globale Variablen verwendet, globale Variablen sind nach Ihrer Definition im ganzen Skript gültig. Um diese ungewünschten Effekte zu vermeiden, verwendest Du besser lokale Variablen. Lokale Variablen sind nur in dem Anweisungsblock gültig, in dem sie auch definiert wurden. Durch die Verwendung von lokalen Variablen kannst Du schwer zu findende Fehler vermeiden.

Um eine Variable als lokal zu deklarieren, stellst Du der Variablen bei der Definition einfach das Wort my voran:

$global = 100;		# globale Variable
my $lokal;		# lokale Variable ohne gleichzeitiger Wertzuweisung
my $lokal = 50;		# lokale Variable mit gleichzeitiger Wertzuweisung

Es ist auch möglich mehrere Variablen gleichzeitig als lokal zu deklarieren. Hierbei gibt man hinter der my Anweisung eine Variablenliste in Klammern an:

my ($lokal1, $lokal2, $lokal3);			# mehrere lokale Variable ohne gleichzeitiger Wertzuweisung
my ($lokal1, $lokal2, $lokal3) = (1,2,3);	# mehrere lokale Variable mit gleichzeitiger Wertzuweisung

Hier nun noch einmal das vorhergehende Beispiel unter Verwendung einer lokalen Variablen.

# Hauptprogramm 

$a = 120;
$b = 40;

print "\$a hat im Hauptprogramm den Wert $a\n";
print "\$b hat im Hauptprogramm den Wert $b\n";

&schleife();

print "\$a hat im Hauptprogramm den Wert $a\n";
print "\$b hat im Hauptprogramm den Wert $b\n";

# Unterroutinen

sub schleife {
  print "---Subroutine Schleife wird aufgerufen---\n";
  my $a;
  for ($a = 0;$a < 5;$a++) {
    print "\$a hat in der Subroutine den Wert $a\n";
  }	
}

Wenn Du dieses Skript ausführst, wirst Du bemerken, daß sich der wert der Variablen $a im Hauptprogramm nicht verändert hat.

Perl Einführung: Subroutinen: Lokale Variablen zurückInhaltzurück