Dies ist der Befehl perltrap, der im kostenlosen OnWorks-Hosting-Provider mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, Windows-Online-Emulator oder MAC OS-Online-Emulator ausgeführt werden kann
PROGRAMM:
NAME/FUNKTION
perltrap - Perlfallen für die Unvorsichtigen
BESCHREIBUNG
Die größte Falle von allen ist, zu vergessen, "Warnungen zu verwenden" oder die -w Schalter; siehe Warnungen
und perlrun. Die zweitgrößte Falle besteht darin, dass Sie nicht Ihr gesamtes Programm unter "benutzen" lauffähig machen
strikt". Die drittgrößte Falle besteht darin, die Liste der Änderungen in dieser Version von . nicht zu lesen
Perl; siehe Perldelta.
awk Traps
Gewohnt awk Benutzer sollten Folgendes besonders beachten:
· Ein Perl-Programm wird nur einmal ausgeführt, nicht einmal für jede Eingabezeile. Sie können eine
implizite Schleife mit "-n" oder "-p".
· Das englische Modul, geladen über
Benutze Englisch;
ermöglicht es Ihnen, auf spezielle Variablen (wie $/) mit Namen (wie $RS) zu verweisen, als ob
Sie waren in awk; Details finden Sie unter Perlvar.
· Semikolons sind in Perl nach allen einfachen Anweisungen erforderlich (außer am Ende von a
Block). Newline ist kein Anweisungstrennzeichen.
· Bei "if" und "while" sind geschweifte Klammern erforderlich.
· Variablen beginnen mit "$", "@" oder "%" in Perl.
· Arrays-Index von 0. Ebenso String-Positionen in substr () und Index().
· Sie müssen entscheiden, ob Ihr Array numerische oder String-Indizes hat.
· Hash-Werte entstehen nicht durch bloße Bezugnahme.
· Sie müssen sich entscheiden, ob Sie String- oder numerische Vergleiche verwenden möchten.
· Das Lesen einer Eingabezeile teilt diese nicht für Sie auf. Sie können es in ein Array aufteilen
du selbst. Und der Teilt() Operator hat andere Argumente als awk'S.
· Die aktuelle Eingabezeile steht normalerweise in $_, nicht in $0. Es hat in der Regel nicht die
Zeilenumbruch entfernt. ($0 ist der Name des ausgeführten Programms.) Siehe perlvar.
· $Ziffer> bezieht sich nicht auf Felder – es bezieht sich auf Teilzeichenfolgen, die von der letzten Übereinstimmung gefunden wurden
Muster.
· Das drucken() -Anweisung fügt keine Feld- und Datensatztrennzeichen hinzu, es sei denn, Sie setzen $, und
"$\". Sie können $OFS und $ORS setzen, wenn Sie das englische Modul verwenden.
· Sie müssen Ihre Dateien öffnen, bevor Sie sie drucken.
· Der Bereichsoperator ist "..", kein Komma. Der Kommaoperator funktioniert wie in C.
· Der Match-Operator ist "=~", nicht "~". ("~" ist der Einerkomplementoperator, wie in C.)
· Der Potenzierungsoperator ist "**", nicht "^". "^" ist der XOR-Operator, wie in C. (Sie
Weißt du, man könnte das Gefühl haben, dass awk ist grundsätzlich nicht kompatibel mit C.)
· Der Verkettungsoperator ist ".", nicht der Null-String. (Die Verwendung der Nullzeichenfolge würde
render "/pat/ /pat/" unparsierbar, da der dritte Schrägstrich als a . interpretiert würde
Divisionsoperator – der Tokenizer ist für Operatoren tatsächlich etwas kontextsensitiv
wie "/", "?" und ">". Und tatsächlich, "." selbst kann der Anfang einer Zahl sein.)
· Die Schlüsselwörter "next", "exit" und "continue" funktionieren anders.
· Die folgenden Variablen funktionieren anders:
Ach Perl
ARGC-Skalar @ARGV (vergleiche mit $#ARGV)
ARGV[0] $0
DATEINAME $ARGV
FNR $. - etwas
FS (was dir gefällt)
NF $#Fld oder so
NR$.
OFMT $#
OFS $,
ORS $\
RLENGTH Länge($&)
RS$/
RSTART-Länge($`)
SUBSEP $;
· Sie können $RS nicht auf ein Muster setzen, sondern nur auf einen String.
· Führen Sie im Zweifelsfall die awk durchkonstruieren a2p und sehen Sie, was es Ihnen bringt.
C / C ++ Traps
Cerebrale C- und C++-Programmierer sollten Folgendes beachten:
· Bei "if" und "while" sind geschweifte Klammern erforderlich.
· Sie müssen "elsif" anstelle von "else if" verwenden.
· Die Schlüsselwörter "break" und "continue" aus C werden in Perl zu "last" und "next",
bzw. Anders als in C tun diese nicht innerhalb eines "do { } while"-Konstrukts arbeiten. Sehen
"Loop-Steuerung" in perlsyn.
· Die switch-Anweisung heißt "given/when" und ist nur in Perl 5.10 oder neuer verfügbar.
Siehe "Switch-Anweisungen" in perlsyn.
· Variablen beginnen mit "$", "@" oder "%" in Perl.
· Kommentare beginnen mit "#", nicht mit "/*" oder "//". Perl interpretiert C/C++-Kommentare möglicherweise als
Divisionsoperatoren, nicht beendete reguläre Ausdrücke oder der Defined-Oder-Operator.
· Sie können nicht die Adresse von irgendetwas nehmen, obwohl ein ähnlicher Operator in Perl ist der
Backslash, der eine Referenz erstellt.
· "ARGV" muss großgeschrieben werden. $ARGV[0] ist Cs "argv[1]" und "argv[0]" endet in $0.
· Systemaufrufe wie Verknüpfung(), Verknüpfung aufheben (), umbenennen(), usw. für Erfolg einen Wert ungleich Null zurückgeben, nicht
0. (System(), gibt jedoch bei Erfolg null zurück.)
· Signalhandler beschäftigen sich mit Signalnamen, nicht mit Zahlen. Verwenden Sie "kill -l", um ihre zu finden
Namen auf Ihrem System.
JavaScript Traps
Umsichtige JavaScript-Programmierer sollten Folgendes beachten:
· In Perl ist das binäre "+" immer eine Addition. "$string1 + $string2" konvertiert beide Strings
zu Zahlen und fügt sie dann hinzu. Um zwei Zeichenfolgen zu verketten, verwenden Sie das "." Operator.
· Der unäre Operator "+" macht in Perl nichts. Es existiert, um syntaktische zu vermeiden
Mehrdeutigkeiten.
· Im Gegensatz zu "for...in" erlaubt Perls "for" (auch "foreach" geschrieben) keine linke Hand
Seite ein willkürlicher Ausdruck sein. Es muss eine Variable sein:
für meine $variable (Schlüssel %hash) {
...
}
Vergessen Sie außerdem nicht die "Schlüssel" darin, da "foreach my $kv (%hash) {}" iteriert
über die Schlüssel und Werte und ist im Allgemeinen nicht sinnvoll ($kv wäre ein Schlüssel, dann a
Wert usw.).
· Um über die Indizes eines Arrays zu iterieren, verwenden Sie "foreach my $i (0 .. $#array) {}".
"foreach my $v (@array) {}" iteriert über die Werte.
· Perl erfordert geschweifte Klammern nach "if", "while", "foreach" usw.
· In Perl wird "else if" mit "elsif" geschrieben.
· "? :" hat Vorrang vor der Zuweisung. In JavaScript kann man schreiben:
Zustand ? do_something() : variabel = 3
und die Variable wird nur zugewiesen, wenn die Bedingung falsch ist. In Perl brauchst du
Klammern:
$bedingung ? do_something() : ($variable = 3);
Oder verwenden Sie einfach "wenn".
· Perl erfordert Semikolons, um Anweisungen zu trennen.
· Mit "my" deklarierte Variablen betreffen nur Code nachdem die Erklärung. Du kannst nicht schreiben
"$x = 1; mein $x;" und erwarten, dass die erste Zuweisung dieselbe Variable betrifft. Es wird
weisen Sie stattdessen einem $x zu, das zuvor in einem äußeren Gültigkeitsbereich deklariert wurde, oder einem globalen
variabel.
Beachten Sie auch, dass die Variable erst im Folgenden sichtbar ist Aussage. Das heisst
dass sich in "my $x = 1 + $x" das zweite $x auf ein zuvor deklariertes bezieht.
· "meine" Variablen beziehen sich auf den aktuellen Block, nicht auf die aktuelle Funktion. wenn du
schreibe "{my $x;} $x;", das zweite $x bezieht sich nicht auf das im deklarierte
blockieren.
· Die Member eines Objekts können nicht als Variablen zugänglich gemacht werden. Die nächste Perle
Äquivalent zu "with(object) { method() }" ist "for", das $_ als Alias für das Objekt verwenden kann:
für ($Objekt) {
$_->Methode;
}
· Das Objekt oder die Klasse, für die eine Methode aufgerufen wird, wird als eines der
Argumente, nicht als separater "this"-Wert.
Sed Traps
Gewürzt Durst Programmierer sollten folgendes beachten:
· Ein Perl-Programm wird nur einmal ausgeführt, nicht einmal für jede Eingabezeile. Sie können eine
implizite Schleife mit "-n" oder "-p".
· Rückverweise in Ersetzungen verwenden "$" statt "\".
· Die Mustervergleichs-Metazeichen "(", ")" und "|" habe keine Backslashes in
Front.
· Der Bereichsoperator ist "..." und kein Komma.
Schale Traps
Sharp-Shell-Programmierer sollten Folgendes beachten:
· Der Backtick-Operator führt eine variable Interpolation ohne Rücksicht auf das Vorhandensein von durch
einfache Anführungszeichen im Befehl.
· Der Backtick-Operator führt im Gegensatz zu . keine Übersetzung des Rückgabewerts durch csh.
· Muscheln (insbesondere csh) führen mehrere Substitutionsebenen in jeder Befehlszeile durch. Perl
führt die Substitution nur in bestimmten Konstrukten wie doppelten Anführungszeichen, Backticks, Winkel durch
Klammern und Suchmuster.
· Shells interpretieren Skripte nach und nach. Perl kompiliert das gesamte Programm
bevor es ausgeführt wird (außer bei "BEGIN"-Blöcken, die zur Kompilierzeit ausgeführt werden).
· Die Argumente sind über @ARGV verfügbar, nicht $1, $2 usw.
· Die Umgebung wird nicht automatisch als separate skalare Variablen zur Verfügung gestellt.
· Der "test" der Shell verwendet "=", "!=", "<" usw. für Stringvergleiche und "-eq", "-ne",
"-lt" usw. für numerische Vergleiche. Dies ist die Umkehrung von Perl, das "eq", "ne",
"lt" für Zeichenfolgenvergleiche und "==", "!=" "<" usw. für numerische Vergleiche.
Perl Traps
Übende Perl-Programmierer sollten Folgendes beachten:
· Denken Sie daran, dass sich viele Operationen in einem Listenkontext anders verhalten als in einem
Skalar eins. Siehe Perldaten für Details.
· Vermeiden Sie nach Möglichkeit Barewords, insbesondere alle Kleinbuchstaben. Man kann es nicht einfach sagen
ob ein Bareword eine Funktion oder ein String ist. Durch die Verwendung von Anführungszeichen auf
Strings und Klammern bei Funktionsaufrufen, Sie werden sie nie verwechseln.
· Sie können durch bloße Betrachtung nicht erkennen, welche Built-Ins unäre Operatoren sind (wie
hacken() und chdir()) und welche Listenoperatoren sind (wie drucken() und Verknüpfung aufheben ()). (Wenn nicht
Prototypen, benutzerdefinierte Unterprogramme können einzige Listenoperatoren sein, niemals unäre.)
Siehe perlop und perlsub.
· Die Leute haben Schwierigkeiten, sich daran zu erinnern, dass einige Funktionen standardmäßig $_ oder @ARGV oder . sind
was auch immer, aber andere, von denen Sie erwarten, dass sie es nicht tun.
· Die Konstrukt ist nicht der Name des Dateihandles, es ist eine Readline-Operation auf
dieser Griff. Die gelesenen Daten werden nur $_ zugewiesen, wenn die gelesene Datei die einzige ist
Bedingung in einer while-Schleife:
während ( ) { }
while (definiert($_ = )) { }..
; # Daten verworfen!
· Denken Sie daran, "=" nicht zu verwenden, wenn Sie "=~" benötigen; Diese beiden Konstrukte sind ziemlich unterschiedlich:
$x = /foo/;
$x =~ /foo/;
· Das Konstrukt "do {}" ist keine echte Schleife, für die Sie die Schleifensteuerung verwenden können.
· Verwenden Sie "my()" für lokale Variablen, wann immer Sie damit durchkommen (aber siehe perlform für
wo du nicht kannst). Die Verwendung von "local()" gibt einer globalen Variablen tatsächlich einen lokalen Wert,
was Sie offen für unvorhergesehene Nebenwirkungen des dynamischen Scopings lässt.
· Wenn Sie eine exportierte Variable in einem Modul lokalisieren, ändert sich ihr exportierter Wert nicht.
Der lokale Name wird zu einem Alias für einen neuen Wert, aber der externe Name ist immer noch ein Alias
für das Original.
Wie immer, wenn einer dieser Fehler jemals offiziell als Fehler deklariert wird, werden sie behoben und
entfernt.
Verwenden Sie perltrap online mit den onworks.net-Diensten