Globale oder lokale Variablen

Hi!

Fange gerade mit Perl an und zum Test hab ich erstmal folgendes Prog geschrieben:

print „Wie ist der Radius\n“;
$Radius = ;
while ($Radius = „undef“) {
print „$Radius\n“;
$Radius = ;
chomp($Radius);
print „$Radius\n“;
}
$pi = 3.141592654;
print($Radius * $pi);

Allerdings bleibt $Radius auf undef, egal was ich eingebe… würd sagen, daß die Vraiable außerhalb und innerhalb der Schleife als zwei Variablen betrachtet wird, doch wie ändert man dies…habe bisher noch nichts gefunden zum Gültigkeitsbereich von Variablen/Literalen, usw…

Dankääää

Bernd

hallo

durch

‚while ($Radius = „undef“)‘

wird $Radius der Wert „undef“ zugewiesen und damit ist die Bedingung für die while-Schleife immer war und sie wird ausgeführt. Um zu prüfen ob $Radius den Wert „undef“ hat, muß man den Befehl

‚while ($Radius eq „undef“)‘

benutzen.

Dann müßte das Progi eigentlich laufen.

Gruß…
…Puhli

hallo

durch

‚while ($Radius = „undef“)‘

wird $Radius der Wert „undef“ zugewiesen und damit ist die
Bedingung für die while-Schleife immer war und sie wird
ausgeführt. Um zu prüfen ob $Radius den Wert „undef“ hat, muß
man den Befehl

‚while ($Radius eq „undef“)‘

benutzen.

ähh, eher nicht. undef ist ein „reserviertes“ Wort in perl und bezeichnet den Zustand einer nicht deklarierten Variablen vor der ersten Zuweisung. Man prüft das mit der undef($var) - funktion, die wahr (!= 0) liefert wenn die $var undef ist.

es ist besser auf einen leerstring zu prüfen, da:
eine leere Variable erfasst wird und undef-Variablen erfasst werden.

tips für den perl-beginner:

  • immer use strict; verwenden. das erzwingt daß Variablen deklariert werden müssen. Das verhindert Fehler.
  • Filehandles (auch STDIN und STDOUT) werden per Konvention GROSS geschrieben.

Also:

use strict;
my ($pi, $radius, $umfang, $flaeche);
$pi=3.141592654; 
while (!$radius) { print "Wie ist der Radius\n"; $radius = ; chomp($radius); }
$umfang=(2 \* $radius \* $pi);
$flaeche=($pi \* ($radius \*\* 2));

(! negiert die Bedingung, $radius ist wahr wenn es „“ bzw. 0 ist)
cu, holli

Dankäääää (O.T.)