Schrift
[thread]12862[/thread]

Hash mit mehreren Werten (Seite 2)



<< |< 1 2 >| >> 19 Einträge, 2 Seiten
Newbie2008
 2008-12-06 17:06
#116883 #116883
User since
2008-12-05
26 Artikel
BenutzerIn
[default_avatar]
Mir fehlte tatsächlich das ; hinter use strict.
Das Script läuft ohne Fehlermeldung!

Soweit super.

Ich habe die while-Schleife

while ($passwords{$name} eq {my $password})

eingebaut - da man solange ein Passwort eingeben können soll, bis das richtige eingegeben wurde.
Sprich: durchlaufe die Anweisung, bis die Passwörter gleich (eq) sind.
Dieser Teil klappt jedoch nicht.

Beim falschen Passwort kann man kein weiteres eingeben.
pktm
 2008-12-06 17:10
#116884 #116884
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Gut erkannt: man kann keines eingeben.

Wie bekommst du denn das, was der Nutzer eingibt? Und wie bekommst du es so lange, bis es das richtige ist?

Irgendwann musst du das Auslesen der Eingabe also wiederholen.
http://www.intergastro-service.de (mein erstes CMS :) )
Newbie2008
 2008-12-06 17:16
#116885 #116885
User since
2008-12-05
26 Artikel
BenutzerIn
[default_avatar]
Innerhalb der While-Schleife wird der User aufgefordert, sein Passwort einzugeben - siehe Ausschnitt aus Script - Ganzes Script ist in Beitrag 7

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
print "\nHallo $name, bitte geben Sie Ihr Passwort ein: \n";
15: chomp ($password = <>);
16: 
17: while ($passwords{$name} eq {$password}) 
18: {
19:         print "\nDas Passwort ist nicht richtig. Bitte versuchen Sie es erneut:\n";
20:         chomp ($password = <>);
21: }
22: 
23:         print "\nDas Passwort ist richtig. Herzlich Willkommen, $name!\n";
pq
 2008-12-06 17:25
#116886 #116886
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
Newbie2008+2008-12-06 16:06:55--
Ich habe die while-Schleife

while ($passwords{$name} eq {my $password})

eingebaut

das sehe ich ja erst jetzt - sorry, aber das ist total kaputt.
$foo eq {$ba} - was willst du mit den geschweiften klammern bloss bezwecken?
und selbst wenn du die weglässt - was soll das 'my' davor? mit my() deklarierst du eine
variable - gleichzeitig wird die - ohne weitere zuweisung - auf undef gesetzt.
es muss heissen:
while ($passwords{$name} ne $password)
beachte das 'ne' statt 'eq'
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
Newbie2008
 2008-12-06 17:36
#116887 #116887
User since
2008-12-05
26 Artikel
BenutzerIn
[default_avatar]
Ich habe es jetzt so angepasst:

Code (perl): (dl )
1
2
3
4
5
6
7
while ($passwords{$name} ne $password) 
{
        print "\nDas Passwort ist nicht richtig. Bitte versuchen Sie es erneut:\n";
        chomp (my $password = <>);
}
 
        print "\nDas Passwort ist richtig. Herzlich Willkommen, $name!\n";


Ist das Passwort auf Anhieb richtig, klappt es. Ist das Passwort falsch, wird die Schleife durchlaufen, aber auch dann noch, wenn das Passwort nun richtig eingegeben wird. Wie löse ich das noch?
pktm
 2008-12-06 17:37
#116888 #116888
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/Perl/bin/perl

use strict;
use warnings;

my $correct_password = "known";
my $password_is_correct = 0;

print "Bitte gib das Passwort ein.\n";
my $password = <STDIN>;
chomp($password);

while( $password_is_correct != 1 ) {
if( $password eq $correct_password ) {
print "Eingabe ok. Haste toll gemacht!\n";
$password_is_correct = 1; # beendet die while-schleife im nächsten Durchlauf
}else{
print "Falsch geraten, bitte gib das Passwort ein.\n";
# passwort erneut eingeben
$password = <STDIN>;
chomp($password);
}
}

print "ende";


Das ist aber nur eine Variante, die mir gerade so einfällt. Dafür funktioniert sie :)
Du hast jetzt noch andere Dinge in deinem Programm, vermenge das mal.
http://www.intergastro-service.de (mein erstes CMS :) )
pktm
 2008-12-06 17:39
#116889 #116889
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Newbie2008+2008-12-06 16:36:44--
Ich habe es jetzt so angepasst:

Code (perl): (dl )
1
2
3
4
5
6
7
while ($passwords{$name} ne $password) 
{
        print "\nDas Passwort ist nicht richtig. Bitte versuchen Sie es erneut:\n";
        chomp (my $password = <>);
}
 
        print "\nDas Passwort ist richtig. Herzlich Willkommen, $name!\n";


Ist das Passwort auf Anhieb richtig, klappt es. Ist das Passwort falsch, wird die Schleife durchlaufen, aber auch dann noch, wenn das Passwort nun richtig eingegeben wird. Wie löse ich das noch?



Wenn das Passwort falsch eingegeben wurde, muss das, was du im Schleifenkopf (die runden Klammern der while-Schleife) angibst, mit der neuen Eingabe überschrieben werden.
my $variablee = <>; innerhalb einer Schleife greift aber nciht auf die Variable außerhalb der Schlleife zu, sie ist nur innerhalb der Schleife gültig.

Am besten lässt du dir einfach mal ausgeben, was wann in einer Variable steht.
http://www.intergastro-service.de (mein erstes CMS :) )
Newbie2008
 2008-12-06 17:40
#116890 #116890
User since
2008-12-05
26 Artikel
BenutzerIn
[default_avatar]
Es klappt - ich habe in Zeile 4 noch das my herausgenommen.


Viiiiiiiiielen Dank für die Hilfe!!
MatthiasW
 2008-12-06 19:02
#116892 #116892
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Auch wenn es jetzt funktioniert hätte ich noch etwas anzumerken, betreffend der Benutzereingabe.

@Newbie2008, du verwendest im Moment den Diamant-Operator(<>) um eine Eingabe vom Benutzer zu bekommen, m.E. ist das jedoch nicht, was du eigentlich möchtest.
Du solltest lieber <STDIN> verwenden, also angeben, dass du von der Standard-Eingabe liest, denn der Diamant-Operator ist ein wenig magisch.
Falls Parameter an dein Programm übergeben werden, wird es nicht mehr so funktionieren, wie du dir das vielleicht gedacht hast, denn <> betrachtet alle Parameter(genauer: alle Elemente von @ARGV) als Dateien und versucht aus diesen zu lesen.

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
<< |< 1 2 >| >> 19 Einträge, 2 Seiten



View all threads created 2008-12-05 15:39.