Schrift
[thread]12862[/thread]

Hash mit mehreren Werten



<< |< 1 2 >| >> 19 Einträge, 2 Seiten
Newbie2008
 2008-12-05 15:39
#116845 #116845
User since
2008-12-05
26 Artikel
BenutzerIn
[default_avatar]
Hallo,
ich bin Anfänger in Perl und stecke bei folgender Aufgabenstellung fest:

Es gilt folgendes Script zu schreiben:
Ein Hash mit fünf User-Namen anlegen, jedem Benutzernamen ist ein individuelles Passwort zugeordnet. Der User wird aufgefordert Name und dann Passwort einzugeben.
Solange ich nur einen User im Hash habe, klappt alles zufriedenstellend:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl –w

%user = ("Benutzername" =>"Peter",
"Passwort" =>"Peter1");

print "\nBitte geben Sie Ihren Benutzernamen ein: \n";
chomp ($name = <>);

print "\nHallo $name, bitte geben Sie Ihr Passwort ein: \n";
chomp ($passwort = <>);

while ($passwort ne $user {Passwort})
{
print "\nDas Passwort ist nicht richtig. Bitte versuchen Sie es erneut:\n";
chomp ($passwort = <>);
}

print "\nDas Passwort ist richtig. Herzlich Willkommen, $name!\n";


Wie löse ich es, wenn ich mehrere User habe???

Freue mich auf Eure Hilfe!!!

Edit betterworld: Code-Tag richtig geschlossen
betterworld
 2008-12-05 15:56
#116847 #116847
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Aktuell wird der gespeicherte Benutzername ("Peter") ja gar nicht benutzt oder abgerufen.

Wenn Du zu den Benutzern nur die Passwörter speichern möchtest, kannst Du den Hash ja so aufbauen:
Code: (dl )
1
2
3
4
my %passwords = (
Peter => "Peter1",
Elfriede => "s3cr3t",
);

Und dann einfach mit $passwords{$name} eq $password überprüfen.
Gast Gast
 2008-12-05 16:25
#116850 #116850
Code: (dl )
$user {Passwort}
das ist für perl was anders als
Code: (dl )
$user{Passwort}
betterworld
 2008-12-05 16:42
#116852 #116852
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Gast+2008-12-05 15:25:49--
Code: (dl )
$user {Passwort}
das ist für perl was anders als
Code: (dl )
$user{Passwort}

Sicher?
Code: (dl )
1
2
3
4
5
6
7
perl -MO=Deparse -lwe '$user {Passwort}' 
Useless use of hash element in void context at -e line 1.
Name "main::user" used only once: possible typo at -e line 1.
BEGIN { $^W = 1; }
BEGIN { $/ = "\n"; $\ = "\n"; }
$user{'Passwort'};
-e syntax OK
Gast Gast
 2008-12-05 17:02
#116855 #116855
Gast+2008-12-05 15:25:49--
Code: (dl )
$user {Passwort}
das ist für perl was anders als
Code: (dl )
$user{Passwort}


Nö.
Newbie2008
 2008-12-06 14:46
#116873 #116873
User since
2008-12-05
26 Artikel
BenutzerIn
[default_avatar]
Klasse - danke für die Idee.

Mein Script schaut nun so aus:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/perl –w

my %passwords = (
    Peter => "Peter1",
    Chris => "Chris1",
        Sven => "Sven1",
        Mike => "Mike1",
        Julian => "Julian1",
        );
        
print "\nBitte geben Sie Ihren Benutzernamen ein: \n";
chomp ($name = <>);

print "\nHallo $name, bitte geben Sie Ihr Passwort ein: \n";
chomp ($password = <>);

while ($passwords{$name} eq {$password}) 
{
        print "\nDas Passwort ist nicht richtig. Bitte versuchen Sie es erneut:\n";
        chomp ($password = <>);
}

        print "\nDas Passwort ist richtig. Herzlich Willkommen, $name!\n";


Wenn ich als Benutzer mein Passwort richtig eingebe, funktioniert alles, gebe ich das falsche Passwort ein, kommt trotzdem die Meldung, mein Passwort sei richtig.
Ich vermute den Fehler in Zeile 17:
while ($passwords{$name} eq {$password}

Wo liegt der Fehler??
pktm
 2008-12-06 14:50
#116875 #116875
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Wenn du mir jetzt versuchst, wortspachlich zu beschreiben, was dein Programm macht, und warum du wann welche Kontrollstruktur verwendet hast, findest du den Fehler.

Ach und benutze bitte strict und warnings.
http://www.intergastro-service.de (mein erstes CMS :) )
Newbie2008
 2008-12-06 15:28
#116878 #116878
User since
2008-12-05
26 Artikel
BenutzerIn
[default_avatar]
Sorry, ich stehe immer noch auf dem Schlauch:

Ziel soll sein:
Ich habe zunächst in einem Hash definiert zu welchem Benutzernamen welches Passwort gehört.
Dann wird der User aufgefordert, seinen Namen zueingeben, im zweiten Schritt dann sein Passwort.
Dieses Passwort wird mit dem im Hash definierten Passwort verglichen und er wird begrüßt oder erhält eine Fehlermeldung und kann sein Passwort eingeben, bis es richtig ist.

Da mir nicht klar ist, wie ich das in diesem Fall richtige Passwort im Hash erreiche - siehe Zeile 17 - komme ich nicht weiter.

Ich habe nun use strict eingefügt und erhalte folgende Fehlermeldung:
unknown 'strict' (tags) in Zeile 4
Abbruch in Zeile 10
betterworld
 2008-12-06 15:32
#116879 #116879
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Mit use warnings solltest Du auf jeden Fall eine Warnung bekommen, die Dich auf das Problem stößt.

Quote
Ich habe nun use strict eingefügt und erhalte folgende Fehlermeldung:
unknown 'strict' (tags) in Zeile 4
Abbruch in Zeile 10

Komisch... hast Du auch ein Semikolon nach "use strict" gemacht? Schau mal in Wiki:das Wiki
pq
 2008-12-06 15:51
#116881 #116881
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Newbie2008+2008-12-06 13:46:32--
Code (perl): (dl )
1
2
3
4
5
6
7
while ($passwords{$name} eq {$password}) 
{
        print "\nDas Passwort ist nicht richtig. Bitte versuchen Sie es erneut:\n";
        chomp ($password = <>);
}

        print "\nDas Passwort ist richtig. Herzlich Willkommen, $name!\n";

[...]
Ich vermute den Fehler in Zeile 17:
while ($passwords{$name} eq {$password}

eq bedeutet: Du prüfst auf Gleichheit der Strings. Wenn also das eingegebene Passwort *gleich*
dem eingetragenen ist, dann schreibst du, das Passwort sei falsch. Das kann so irgendwie
nicht hinhauen. Es ist doch genau umgekehrt.

edit: und Wiki:UseStrict solltest du tatsächlich unbedingt lesen. Wenn dein
Skript nicht mit strict läuft, haben weniger Leute Lust, darin Fehler zu suchen - aus gutem Grund.
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
<< |< 1 2 >| >> 19 Einträge, 2 Seiten



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