Thread Erläuterung zu Vokabeltrainer (6 answers)
Opened by Futureflo at 2011-04-01 14:11

Linuxer
 2011-04-01 23:42
#147297 #147297
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Hi,

ich versuch mich mal an Antworten:

Zeile 7 macht nur die Funktion "shuffle" im aktuellen Kontext verfügbar.

Zeile 15 legt einen neuen benannten Hash an; mehr nicht. Ich versteh den Kontext der Frage nicht.
Wo wird hier irgendwas zu einem Hash gemacht?

Zeile 18 muss von rechts nach links gelesen werden. Solange eine Zeile vom Handle $loesung_FH gelesen werden, wird das links (vom while) stehende Kommando ausgeführt. In dem Kommandoaufruf passieren mehrere Dinge:
Zunächst wird im Array @vokabeln_array das Element mit dem Index $.-1 ermittelt ($. ist die Nummer der bisher gelesenen Zeilen). Dieser nachgeschlagener Wert wird im Hash %vokabeln dann als Schlüssel eingetragen und die aktuell eingelesen Zeile wird als Wert eingetragen. Zu guter Letzt entfernt chomp() den Zeilenumbruch von dem gerade zugewiesenen Wert.

Damit für die gerade beschriebene Wertzuweisung ein Hash zur Verfügung steht, muss er eben vorher (in Zeile 15) angelegt und bekannt gegeben werden. Mit Hilfe dieses Hashs hast Du nun eine Zuordnung "Vokabel => Lösung" und kannst so sehr einfach ermitteln, wie die Lösung zu einer Vokabel sein sollte.

In Zeile 23 liest die Funktion shuffle() den @vokabeln_array und gibt die Elemente in einer zufälligen Reihenfolge als Liste weiter. Die for-Schleife greift diese Liste auf und geht sie Element für Element durch.
Und das geht solange, bis die Liste mit allen Elemente abgearbeitet wurde.

Ich nehme an, dass Du mit Deiner letzten Frage die Zeile 27 meintest. Ja das kann man so machen. Es wird kontrolliert, ob zur aktuellen Vokabel in $aufgabe die Eingabe des Users mit der im Hash %vokabeln abgelegten Lösung übereinstimmt.

Ich find den Weg akzeptabel; aber ich würde es anders schreiben. ;)
pq hat ja schon einen Punkt vorgebracht. Auch wenn man durchaus mehrere Schritte zusammenfassen kann, sollte man das nicht wirklich oft tun. Besser ist es, in kleinen Einheiten zu denken und auch so schreiben.
Ein Schritt ist das Entfernen des Zeilenumbruchs mit chomp(). Ein anderer Schritt ist die Zuweisung im Hash.
Jeder Schritt verdient seine eigene Zeile und unter Umständen auch einen eigenen Kommentar.
So kann man das Skript nach einem Jahr Abstinenz einfacher und schneller nachvollziehen.


Funktioniert das Skript denn so, wie Du Dir das vorstellst?

Linuxer

PS: Jetzt erahne ich auch den Ursprung der Nachfrage ;) Das scheint mir von payx übernommen ;)


edit: Link zur ersten Diskussion Vokabeltrainer
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!

View full thread Erläuterung zu Vokabeltrainer