31

Perl (Fach) / Perl (Lektion)

Perl

Diese Lektion wurde von Yuekseltoprak erstellt.

Lektion lernen

Anzeige
  • Erläutern Sie den grundlegenden Unterschied zwischen der Verwendung von my bzw. local: my: innerhalb eines Blockes; bei der Initialisierung einer Variablen, wird immer eine neue Speicheradresse reserviert / genutzt; -> lexikalischer Scope local: innerhalb eines Blockes; bei der Initialisierung einer Variablen, wird der alte Wert überschreiben und gemerkt. Die neue Variable nutzt für den Wert die gleiche Speicheradresse. Am Abschluss des Blockes wird der auf dem Stack abgelegte und gemerkte Wert wieder zurück geschrieben; -> dynamischer Scope 
  • Welche Warnmeldung zieht ein use warnings; nach sich? use warnings; generiert eine Fehlermeldung wenn auf eine nicht initialisierte Variable lesenden zugegriffen wird. 
  • Welche Probleme können sich aus dem Verzicht auf use strict; und der unterlassenen Deklaration von Variablen mit my ergeben? Benutzerfehler bei der Initialisierung oder Verwendung von Variablen, können nicht abgefangen werden. 
  • Durch welche Anweisung hätten Sie den zentralen Fehler in folgendem kleinen Programm bereits vor der Ausführung beheben finden können? Durch die Verwendung von use strict; und use warnings;. 
  • Was verhindert die Verwendung von use warnings? Das eine Warnmeldung ausgegeben wird, sobald lesen auf eine nicht initialisierte Variable zugegriffen wird. 
  • Wie können Sie ein File quasi auf einen Rutsch einlesen, d.h. ohne explizit in einer Schleife über die einzelnen Records laufen zu müssen? Mit dem Recordseperator; dieser wird auf undef gesetzt 
  • Was gibt print eval(join(`-`(1..5)))aus? -13 
  • Mit welcher Perl-Funktion können Sie zwanglos die mathematische Signum-Funktion nachbilden? (sign(x) = 1, falls x > 0, sign(x) = 0, falls x = 0, sign(x) = -1, falls x < 0). 
  • Mit welcher Perl-Funktion können Sie zwanglos die mathematische Signum-Funktion nachbilden? (sign(x) = 1, falls x > 0, sign(x) = 0, falls x = 0, sign(x) = -1, falls x < 0).  Geben Sie den Code für eine Subroutine namens an, die genau dieses ohne tut (verwenden Sie hierbei auch nicht den ?-Operator). 
  • Mit welcher Perlfunktion können zwangslos die mathematische Signum-Funktion nachbilden? Geben Sie den Code für eine Subroutine namens sign an, die genau diese ohne if/else tut (Verwenden Sie auch nicht den ?-Operator) Mit dem ternären Operator <=> 
  • Anzeige
  • Wie können Sie einen Hash, der bekannt aus Keys und diesen zugeordneten Values besteht, umdrehen, d.h. einen Hash erzeugen, der eine Zuordnung in der quasi anderen Richtung ermöglicht? mit der Funktion reverse %h = reverse %h 
  • Warum kann ein Hash durch reverse umgedreht werden? Was geschieht mit den keys und values? Warum liefert my %r = reverse %h einen neuen Hash %r, dessen Keys aus den Werten von %h besteht? Weil ein Hash ein ganzzahliges Array ist.
  • Worin besteht das Problem beim Umdrehen von Hashes? Die Werte können mehrfach vorhanden sein. Werden die Werte dann zu keys, haben Sie keine Eindeutigkeit mehr. Mehrfach vorhandene Keys werden gegenseitig ersetzt. Somit ist es nicht mehr möglich den Keys die passenden Werte zuzuordnen. 
  • Erläutern Sie den Unterschied bzgl. der Verwendung einfacher und doppelter Anführungszeichen. Einfache Anführungszeichen: - Zeichenketten und Steuerzeichen werden nicht weiter interpretiert. Ausgabe unverändert doppelte Anführungszeichen: - Zeichenketten und Steuerzeichen werden interpretiert bzw. ausgewertet 
  • Was liefert die Auswertung eines Arrays im skalaren Kontext zurück? Die Anzahl der im Array enthaltenen Skalare. 
  • Wie könnten Sie dieses Problem vermeiden? Es muss eine Referenz angegeben werden. Das Array @feld müsste die Referenz erhalten => \@feld 
  • Wie kann das Problem gelöst werden? Entweder muss das Array als eine Reverenz angegeben werden oder die Variablen müssen umgedreht werden. 
  • Geben Sie ein map-Statement an, mit dessen Hilfe Sie alle Elemente eines Arrays (nur die numerischen Werte enthält) um zwei zu erhöhen. map 2 $_ += 2 3@array; 
  • Was ist eine Closure? Eine Closure ist eine Subroutine, die als Rückgabewert eine Subroutine hat. Closures erlauben Funktionen bzw. Subroutinen und Variablen aus ihrem Umfeld mitzunehmen. Führt zu OOP. Eine Subroutine die eine andere Subroutine aufruft 
  • Geben Sie einen regulären Ausdruck an, mit dessen Hilfe Datumsangeben der Form DD-MMM-YYYY gematched werden können, wobei der dreistellige Monat als Buchstabenkürzel angegeben wird- /^\d{2} - \w{3}- \d{4} $/ oder m / ^\d\d - \w\w\w- \d\d\d\d $/
  • Geben Sie einen regulären Ausdruck für eine IPAdresse (192.168.31.16) an. Dabei wird nicht berücksichtigt, dass es nur bis Zahl 255 geht. Aber es muss gewährleistet sein, dass die Zahlen zwischen 1 und 3 Stellen haben können. /^(\d{1-3}\.){3}(\d{1-3}) oder m/^(\d{1-3}\.)(\d{1-3}\.)(\d{1-3}\.)(\d{1-3})
  • Geben Sie eine regulären Ausdruck für eine Dezimal oder Gleitkommazahl an. Geben Sie den Exponenten mit einem E an. /^[+-]?\d+(\.\d*)?(E[+-]?\d+)?$ 
  • Welchen Vorteil bitet die Verwednung von Dispatchtabellen im Vergleich zu quasi traditionellen Strukturen wie einem switch/case-Kostrukt? -  Sau schnell, da mit Hash -  Dynamisch -  Erweiterbar! -  Weniger Logik zu implementieren -  Wartbar 
  • Geben Sie ein Statement an, mit dessen Hilfe Sie eine Referenz auf ein Array namens @feld einem Skalar $ref zuweisen. $ref = \@feld; 
  • Warum kann ein Statementmodifier einer for-Schleife auf $_ zurückgreifen? Warum geht es bei folgendem Programm nicht? my $summe = 0; $summe += $wert for my $wert [1..100] 
  • Warum kann ein Statementmodifier einer for-Schleife auf $_ zurückgreifen? Warum geht es bei folgendem Programm nicht? my $summe = 0; $summe += $wert for my $wert [1..100]  Weil die Variablen bei jedem Schleifendurchlauf neu initialisiert werden müssten Wegen der Initialisierung. 
  • Warum müssen mehrdimensionale Felder in Perl stets als Array aus Referenzen auf Array aus Referenzen ... Umgesetz werden? Weil ein Element eines Hashes immer ein Skalar ist. Weil Referenzen auf Datenstrukturen wie Arrays oder Hashes der Schlüssel zur Generierung verschachtelter Datenstrukturen sind. 
  • Was tut $data =~ tr/a-z/A-Z? tr ersetzt alle Kleinbuchstaben von a-z durch Grußbuchstaben. 
  • Sie haben einen Hash my %h = qw(abc 16 def 3 geh 82 ijk 12); Geben Sie bitte ein Statement an, das Hashes sortiert und nach Values mit dessen Schlüssel ausgibt. print"$_\t $h ($_)"for sort(keys(%h));
  • Mit welchem Statement kann eine Schleife vorzeitig beendet werden? last; 
  • Anzeige
  • Mit welchem Statement kann man mitten in einer Schleife den Beginn eines neuen Schleifendurchlaufs erzwingen? next; redo;