Hallo alle zusammen,
ich mache derzeit einen Fernlehrkurs, in dem momentan PERL behandelt wird. Leider erreiche ich auf die Schnelle niemanden, hätte aber dennoch eine (vermutliche Anfänger-) Frage:
Ich soll für eine Aufgabe eine einfache User-Kennwort-Abfrage zum Ausführen über die Command / Shell mittels PERL erstellen. Dazu soll ich eine Hash-Variable nutzen, um die User und Passwörter zu hinterlegen. Ich hab jetzt glaub zwei Tage gegoogle't, wurde aber nicht wirklich fündig (mein Lehrheft hilft mir da auch nicht wirklich weiter ...) und auch das 'Try-and-Fail' wird langsam langweilig. Zu meiner eigentlichen Frage:
Ich lese überall, dass ein Hash folgend notiert wird:
%adresse = ("Vorname" => "Stefan",
"Nachname" => "Schultz",
"Ort" => "Berlin");
Soweit so klar - aber ich finde hier überall nur Beispiele mit einem Datensatz, wie muss ich den zweiten Datensatz hinzugeben? Stimmt meine Annahme, dass ich meine Daten wie folgt notieren muss:
%zugangsdaten = ("User" => "Stefan", "Martin",
"Pass" => "user1", "user2");
Zwar hatte ich das Skript schon mit diesem Aufbau versucht, scheiterte dann aber an der Ausgabe der Variablen (wollte zum prüfen eine Ausgabe per Print-Funktion machen, um zu sehen, ob die Datenpaare zusammenpassen).
Ich erhalte in diesem Fall dann immer nur die "Pass"-Einträge, allerdings interessanterweise immer nach folgender Reihenfolge: user5, user1, user4, user3, user2...
Zur Abfrage nutzte ich folgenden Code (bin kein PERL-Profi, Verbesserungsvorschläge und Korrekturen gerne erwünscht):
foreach $schluessel (keys %zugangsdaten)
{
print ($schluessel, " ", $zugangsdaten($schluessel), "\n");
}
Auch im Online-Handbuch von PERL werde ich irgendwie auch nicht fündig - hab ich da einen kompletten Denkfehler in meinem Skript, bzw. wie ich es angehe?
Das nächste Problem sehe ich kommen, wie ich die Hash-Einträge mit den beiden Variablen für die <STDIN>-Eingaben gegen+berstellen kann..
Ich wollte so vorgehen:
- Mittels der foreach-Zeile / keys die Datensatz-Anzahl des Hashes auslesen
- Über eine Schleife die Datensatznummer der Hash-Einträge user einzeln lesen und mit der Benutzereingabe über <STDIN> prüfen
-> Wenn der eingegebene User nicht mit dem Feldwert übereinstimmt, Schleife fortsetzen
-> Bei übereinstimmung den akuellen Datensatz verwenden, um das pass-Feld des Hashes mit der <STDIN>-Eingabe des Users zu vergleichen
Zu guter letzt mein derzeitiges Skript, vielleicht könnt ihr mir einen Tipp geben:
#!c:/perl/bin/perl -w
# Variablen initialisieren
$usereing = "" # Variable fuer die Benutzerabfrage
$passeing = "" # Variable fuer die Kennwortabfrage
# Hash-Daten definieren
%zugangsdaten = ("User" => "Stefan", "Martin", "Thomas", "Robert", "Gerhard",
"Pass" => "user1", "user2", "user3", "user4", "user5");
# Benutzer-Eingabe fuer User und Kennwort
print ("User eingeben: ";
chomp ($usereing = <STDIN>);
print ("\nPasswort eingeben: ";
chomp ($passeing = <STDIN>);
print ("\n\n");
# Testzeile zum Auswurf der Datensatzpaare
foreach $schluessel (keys %zugangsdaten)
{
print ($schluessel, " ", $zugangsdaten($schluessel), "\n");
}
# Schleife zur Gegenueberstellung der ausgelesenen Feldwerte mit der Benutzereingabe
Hoffe auf brauchbare Antworten oder einen guten Link, der meinen Fehler beschreibt und löst - denke aber, ich hab da einen gravierenden Denk- oder Ansatzfehler...
LG Mike