@lexl
Du solltest dir mal den "x" Operator anschauen. Dieser Multipliziert einen String.
$string = " " x 50;
Danach ist in $string ein 50 zeichen großer String der aus leerzeichen besteht. Dadurch kannst du dir deine Funktion sparen. Einen String zu definieren der wirklich 30 Leerzeichen groß ist so wie "MrDoubtFire" es gemacht hat würde ich auch nicht machen, dass ganze ist zu Fehler anfällig.
$string = "abc" x 3;
Danach würde in $string "abcabcabc" drin stehen. Ich hoffe die Funktionsweise ist klar geworden. Der Linke Operand wird als ein String gewertet und wird so oft wiederholt wie der Nummerische Ausdruck der als Rechter Operand steht. Du kannst also nicht einfach beide Werte Tauschen. Wenn dir dieser Abschnitt nicht klar ist, dann solltest du dir die Ausgabe von folgendes anschauen.
print 2 x 6, "\n";
print 6 x 2, "\n";
Ansonsten um zu überprüfen ob ein String eine bestimmte größe hat, kannst du "length" benutzen.
$string = "hallo";
print length $string, "\n";
Das würde "5" ausgeben, das ganze kannst du also auch so in einer if Kontrollstruktur schreiben.
if ( length $string != 10 )
{
print "Zeichenkette muss 10 Zeichen groß sein\n";
}
Besser wäre wenn du das gleich mit der Eingabe koppelst und die Eingabe somit wiederholen lassen würdest.
{
print "Bitte 10 Zeichen eingeben: ";
chomp( $input = <STDIN> );
redo if length $input != 10;
}
Ob 10 Zeichen eingegeben worden sind, kannst du auch mit einer regex Testen. Allerdings dürfte das length dafür Optimaler sein.
{
print "Bitte 10 Zeichen eingeben: ";
chomp( $input = <STDIN> );
redo unless $input =~ /^.{10}$/;
}
Die regex wird erst dann Interessant wenn du beides Testen möchtest, z.B. ob nur Zahlen eingegeben worden sind, und davon eine bestimmte Menge. Hier müsste man genau 10 Zahlen eingeben.
{
print "Bitte 10 Zahlen eingeben: ";
chomp( $input = <STDIN> );
redo unless $input =~ /^\d{10}$/;
}
Das ganze kannst du auch verwenden um einen Bereich von zeichen zu erlauben.
redo unless $input =~ /^\d{10,15}$/; # 10 - 15 Zahlen sind erlaubt.
redo unless $input =~ /^\d{,33}$/; # Minimum 0, maximal 33 Zahlen.
redo unless $input =~ /^\d{20,}$/; # Minimal 20, maximal unendlich Zahlen.