Biesterfeld: Geltungsbereich von my

Beitrag lesen

Hej,

Angenommen ich habe eine subroutine, und in dieser noch eine while- oder for-Schleife. Wenn ich nun innerhalb der while-Schleife in der sub die Erklärung mache:

sub xyz {
while my ($i > 0) {
   $i++;
   usw.....
}
}

Das ist ganz schlecht aus zwei Gründen:

1.) Ist es syntaktisch falsch! Es müsste doch eher:

  
sub xyz {  
  while ( my $i > 0) {  
     $i++;  
     usw.....  
  }  
}

heissen.

2.) ist das aus einem konkreten Grund problematisch: Damit deklarierst du $i bei der Prüfung des boolschen Ausdruckes jedesmal neu. Anders als z.B. bei einer for-Schleife, wo die Deklaration in der Initialisierung nur einemal vorgenommen wird:

  
for( my $i = 0; $i < 10; $i++ ) {  
  print( $i );  
}

Und was sind denn Geltungsräume für my-Deklarationen, Subs, Schleifen, eventuell auch if-Anweisungen?

Mit my deklararierte Variablen gelten immer in dem Block, in dem sie deklarariert worden sind:

http://perldoc.perl.org/functions/my.html

Beste Grüße
Biesterfeld

--
Art.1: Et es wie et es
Art.2: Et kütt wie et kütt
Art.3: Et hätt noch immer jot jejange
Das Kölsche Grundgesetz