Perl - Skalar überprüfen ob es eine soundso große Zahl ist

Julian_eMac

Julian_eMac

Aktives Mitglied
Thread Starter
Dabei seit
10.05.2006
Beiträge
269
Reaktionspunkte
0
Moin,

Wie schreibe ich eine if schleife und frage ab ob eine Skalar größer als wert x und kleiner als y ist und zudem nicht leer ist ?

Code:
PRENAME:
print "Your Prename: ";
	chomp($name = <STDIN>);
		if ($name eq "") {
			print " Your Prename must be a filled String\n" and goto PRENAME };
				print "Saved..\n";

Danke schonmal im Voraus.
 
if ist keine Schleife sondern nur eine einmalige Bedingungsabfrage!

Was Du suchst ist while eine Schleife die läuft solange eine Bedingung erfüllt ist!
 
in Perl gibt es auch noch elsif (eine weitere bedingung)
 
okay habs rasugefunden... allerdings stehe ich jetzt vor der frage, wie ich prüfen kann ob ein skalar ein string ist oder eine zahl
 
in Perl gibt es auch noch elsif (eine weitere bedingung)

Das macht es immernoch nicht zu einer Schleife (Eine Schleife ist ein programmatisches Konstrukt, das solange *wiederholt* ausgeführt wird, bis eine Abbruchbedingung erfüllt ist) ;)

Was dein Problem angeht, schau dir mal die Perl RegEx an. Die sollte das können ;)
 
okay okay.. hast ja recht ;)
Bedingung.. besser ? :D

RegEx ? Bitte was ?
 
okay okay.. hast ja recht ;)
Bedingung.. besser ? :D

RegEx ? Bitte was ?

Ok, greif dir ein Perl-Buch und schau dir dort das Kapitel zu Regulären Ausdrücken (Regular Expressions, kurz RegEx oder regex) an. RegEx sind für mich übrigens *der* Grund, Perl einzusätzen!
 
hab grade das Lama-Buch hier liegen, allerdings ist in dem Buch nur ein einziges mal Regex aufgeführt. Zum glück habe ich grade Perluser kontaktiert, der hilft mir grade :)
 
Wie schreibe ich eine if schleife und frage ab ob eine Skalar größer als wert x und kleiner als y ist und zudem nicht leer ist ?

Nur so ne quick'n'dirty Idee:
Code:
use strict;
use warnings;

our $PRE;

sub getname()
{
        print "Verrat mir deinen Namen: ";
        chomp(my $name = <STDIN>);
        return undef unless $name;                                      # keine leeren namen
        return undef unless length $name > 5;           # nich kleiner als fuenf
        return undef unless length $name < 15;          # nich groesser als fuenfzehn
        return undef unless $name !~ m#\d#;                     # keine zahl im namen

        $PRE = $name;
        return 1;
}

getname() while not defined $PRE;
print "Dein Name: $PRE\n";
 
Die erste und die zweite Bedingung sind redundant, da ein leerer Name automatisch kleiner als 5 ist. Außerdem würde ich es vermeiden, Variablen in subs direkt zu verändern, auch wenn das in so einem Schnipsel sicher egal ist.
Variante ohne "our":
Code:
#!/usr/bin/perl

use strict;
use warnings;

my $name;
$name = getname() while not defined $name;
print "Dein Name: $name\n";

sub getname {
        print "Verrat mir deinen Namen: ";
        chomp(my $name = <STDIN>);
        return undef unless $name;                      # keine leeren namen
        return undef unless length $name > 5;           # nich kleiner als fuenf
        return undef unless length $name < 15;          # nich groesser als fuenfzehn
        return undef unless $name !~ m#\d#;             # keine zahl im namen
        return $name;
}
 
Die erste und die zweite Bedingung sind redundant, da ein leerer Name automatisch kleiner als 5 ist.
Kommt Ctrl+d als Eingabe hat man undef in der Variable. Die Bedingungen werden beide gebraucht sonst kann es zu unerwarteten Ergebnissen kommen. Ausserdem gehoert sich das so, wenn man -w verwendet. :motz:

Außerdem würde ich es vermeiden, Variablen in subs direkt zu verändern, auch wenn das in so einem Schnipsel sicher egal ist.
Wie gesagt: Quick'n'Dirty. Nur so als Loesungshilfe. ;)
 
Ja, gut. Mit ctrl-d hatte ich nicht gerechnet — was natürlich ein Fehler war ;).
 
do-while ist euch Perlern wohl zu simple? ;)
 
Nein, aber ich habe mir angewöhnt, die Dinge fein säuberlich zu sortieren. Das erleichtert die Wiederverwendung von einmal geschriebenem code.

Aber wie heißt es so schön: TIMTOWTDI
 
Zuletzt bearbeitet:
Zurück
Oben Unten