Thread Perl Script erst nach aufforderung beenden (28 answers)
Opened by krusty at 2006-05-09 23:07

AndreasM
 2006-05-10 13:45
#65896 #65896
User since
2005-10-08
31 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,
bei <STDIN> darfst Du nicht vergessen: es wird immer noch die Entertaste gedrückt, was in der Regel einen Newlinezeichen ("\n") entspricht. Mit 'chop' oder 'chomp' kannst Du es entfernen.
'chop' entfernt rigoros das letzte Zeichen und liefert es als Ergebnis zurück.
'chomp' entfernt Newlinezeichen am Ende eines Strings und liefert als Ergebnis die Anzahl der entfernten Zeichen zurück.

Für Deine Zwecke reicht ein 'chomp $range;'

Versuch's mal so:

$range=0;
while ($range !~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/)
{
print "Enter right IP-range e.g. 192.168.2.0!\nIP-range: ";
$range = <STDIN>;
chomp $range;
if ($range !~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/){print print "Wrong IP-range.\n"}
}


$range ist erstmal null.
Dann kommt die while-Schleife mit einer regex-Prüfung.
Da gibt es nicht nur =~ um etwas zu finden, sondern auch !~ um etwas NICHT zu finden.
Weil die Regex nicht passt springt das Skript in die Weilschleife und erwartet eine erste Eingabe. Ist die fehlerhaft gibt es eine Meldung und die while-Schleife wird neu durchlaufen.

Grüße
AndreasM

P.S. Ob !~ syntaktisch richtig ist weiss ich nicht aus dem Kopf. Ich habe die Negierung einer Regex aber schon genutzt. Es geht :)
Alternativ: statt 'while' und Regexnegierung 'unless' und Regex

P.P.S. Der Ausdruck zur syntaktischen Prüfung einer IP-Adresse ist etwas schlicht. er lässt ja auch 666.666.666.666 zu, was aber verboten ist. Auch eine '192.168.1.0' ist gültig, aber genaugenommen ein Broadcast.

P.P.P.S. Jetzt habe ich eben noch Blödsinn geschrieben:
$range = chomp <STDIN> funktioniert nicht, weil chomp ja als Ergebnis die Anzahl der entfernten Zeichen zurückgibt. Du hä#ttest als Ergebnis immer '1'\n\n

<!--EDIT|AndreasM|1147255180-->

View full thread Perl Script erst nach aufforderung beenden