Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]12306[/thread]

Prüfen ob Variable Leer ist

Leser: 33


<< >> 7 Einträge, 1 Seite
Vermillion
 2008-08-07 00:56
#113175 #113175
User since
2008-07-18
24 Artikel
BenutzerIn
[default_avatar]
Ich habe ein Script bei dem der User entweder etwas eingibt oder die Frage mit Enter überspringt.

Nun muss ich prüfen ob in der Variable etwas steht oder ob der User die Frage mit Enter übersprungen hat.

Wenn ich es allerdings so mache
Code (perl): (dl )
1
2
        my $Frage = <STDIN>;
        while ($Frage!=""){


Bekomme ich eine Fehlermeldung das $Frage kein numerischer Wert ist.

Jetzt suche ich entweder eine Möglichkeit $Frage irgendwie anders zu prüfen

oder aber ich weise $Frage vorher eine Zahl (z.B. 0) zu und mache nach der Angabe des Users einen Cast (ist das in Perl überhaupt möglich? Hab bei Google nichts gefunden...) und gucke ob $Frage != 0 ist...

Wie würdet ihr das machen?
#Kein Kommentar
 2008-08-07 01:43
#113176 #113176
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
wenn du eine eingabe von dem benutzer überprüfst, welche aus der konsole kommt, musst du immer aufpassen, da immer ein newline-zeichen mit angefügt wird.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
my $variable = <STDIN>;    
# auch wenn der benutzer nur return drückt ist trotzdem $variable = "\n"

# das newline-zeichen kann man aber mit chomp entfernen:
chomp $variable;

# der vergleichsoperator für strings heißt 'eq':
while (not($variable eq "")){

# oder - die negativierte form namens 'ne' -
while ($variable ne ""){
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
pq
 2008-08-07 01:43
#113177 #113177
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Code (perl): (dl )
while ($frage ne '')

perlop
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
bloonix
 2008-08-07 10:14
#113178 #113178
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Aber bitte vorher noch ein

chomp $Frage;

denn ansonsten mutiert die Schleife zu einer Endlosschleife.
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
bytebrain
 2008-08-07 10:39
#113179 #113179
User since
2008-07-21
20 Artikel
BenutzerIn
[default_avatar]
Hallo :)

Du kannst auch folgenden Code anwenden:

Code: (dl )
1
2
3
4
chomp $var;
if( length($var) > 0 ) {
# es ist etwas in der Variable drin...
}


Hier prüfst du nämlich, ob die Länge der Zeichenkette in $var größer 0 ist.

Gruß,
bytebrain
Gast Panzer
 2010-08-18 12:52
#140750 #140750
hey ich habe auch eine Frage und sie ist zumindest so ähnlich wie die hier, deswegen poste ich sie einfach mal ;)

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$gosa=$entry->get_value("gosaMailAlternateAddress");    
                $mail=$entry->get_value("mail");
                

                #print ("sn : $sn\n");
                print ("cn : $cn\n");

                if( length($gosa) > 0 ) 
                        {               
                        print ("gosa : $gosa\n");
                        }
                else
                        {
                        print ("gosa : nicht vorhanden\n");
                        };


so mein Problem ist, das ich nicht weiß wie ich überprüfen kann ob in 'gosaMailAlternateAddress' etwas drin ist - beim ersten aufrufen von $gosa sagt er mir manchmal das hier
Quote
Use of uninitialized value in length at ./test2.pl line 40, <DATA> line 225.
(das ist hier jetzt line 8)
wäre voll cool wenn ihr mir da helfen könntet, ich finde einfach nichts und Chef wird schon grummelig^^

MfG Panzer
Linuxer
 2010-08-18 13:01
#140752 #140752
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Dann hat $entry->get_value() nichts bzw. undef als Wert zurückgegeben.

Du kannst überprüfen, ob $gosa einen definierten Wert hat:

Code: (dl )
1
2
3
4
if ( defined $gosa && length($gosa) > 0 ) {
...
}
...
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
<< >> 7 Einträge, 1 Seite



View all threads created 2008-08-07 00:56.