Il s'agit de la commande perltrap qui peut être exécutée dans le fournisseur d'hébergement gratuit OnWorks en utilisant l'un de nos multiples postes de travail en ligne gratuits tels que Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS
PROGRAMME:
Nom
perltrap - Pièges Perl pour les imprudents
DESCRIPTION
Le plus gros piège de tous est d'oublier "d'utiliser les avertissements" ou d'utiliser le -w changer; voir les avertissements
et perlrun. Le deuxième plus gros piège est de ne pas rendre l'intégralité de votre programme exécutable sous « use
strict". Le troisième plus gros piège est de ne pas lire la liste des changements dans cette version de
Perl ; voir perldelta.
ok Pièges
Habitué awk les utilisateurs doivent prendre note des éléments suivants :
· Un programme Perl s'exécute une seule fois, pas une fois pour chaque ligne d'entrée. Vous pouvez faire un
boucle implicite avec "-n" ou "-p".
· Le module anglais, chargé via
utiliser l'anglais;
vous permet de faire référence à des variables spéciales (comme $/) avec des noms (comme $RS), comme si
ils étaient dans awk; voir perlvar pour plus de détails.
· Les points-virgules sont requis après toutes les instructions simples en Perl (sauf à la fin d'un
bloquer). La nouvelle ligne n'est pas un délimiteur d'instruction.
· Les accolades sont requises sur les "if" et "while".
· Les variables commencent par "$", "@" ou "%" en Perl.
· Index des tableaux à partir de 0. De même, les positions de chaîne dans substr () et indice().
· Vous devez décider si votre tableau a des indices numériques ou de chaîne.
· Les valeurs de hachage ne naissent pas d'une simple référence.
· Vous devez décider si vous souhaitez utiliser des comparaisons de chaînes ou numériques.
· La lecture d'une ligne d'entrée ne la divise pas pour vous. Vous pouvez le diviser en un tableau
toi-même. Et le diviser() l'opérateur a des arguments différents de awk's.
· La ligne d'entrée actuelle est normalement en $_, pas en $0. Il n'a généralement pas le
saut de ligne supprimé. ($0 est le nom du programme exécuté.) Voir perlvar.
· $chiffre> ne fait pas référence aux champs--il fait référence aux sous-chaînes correspondant à la dernière correspondance
motif.
· Le impression() l'instruction n'ajoute pas de séparateurs de champs et d'enregistrements à moins que vous ne définissiez $, et
"$\". Vous pouvez définir $OFS et $ORS si vous utilisez le module anglais.
· Vous devez ouvrir vos fichiers avant de les imprimer.
· L'opérateur de plage est "..", pas une virgule. L'opérateur virgule fonctionne comme en C.
· L'opérateur de correspondance est "=~", pas "~". ("~" est l'opérateur de complément à un, comme en C.)
· L'opérateur d'exponentiation est "**", pas "^". "^" est l'opérateur XOR, comme en C. (Vous
sais, on pourrait avoir l'impression que awk est fondamentalement incompatible avec C.)
· L'opérateur de concaténation est ".", pas la chaîne nulle. (L'utilisation de la chaîne nulle
rendre "/pat/ /pat/" non analysable, car la troisième barre oblique serait interprétée comme un
opérateur de division - le tokenizer est en fait légèrement sensible au contexte pour les opérateurs
comme "/", "?" et ">". Et en fait, "." lui-même peut être le début d'un nombre.)
· Les mots clés « suivant », « sortir » et « continuer » fonctionnent différemment.
· Les variables suivantes fonctionnent différemment :
Awk Perle
Scalaire ARGC @ARGV (comparer avec $#ARGV)
ARVG[0] 0 $
NOM DE FICHIER $ARGV
FNR $. - quelque chose
FS (ce que vous aimez)
NF $#Fld, ou quelque chose comme ça
NR $.
OFMT $#
OFS $,
SOR $\
LONGUEUR longueur ($&)
RS$/
RSTART longueur($`)
SOUS-SEP $ ;
· Vous ne pouvez pas définir $RS sur un modèle, uniquement sur une chaîne.
· En cas de doute, exécutez le awk construire à travers a2p et voyez ce que cela vous donne.
C / C ++ Pièges
Les programmeurs Cerebral C et C++ doivent prendre note des éléments suivants :
· Les accolades sont obligatoires sur les "if" et "while".
· Vous devez utiliser "elsif" plutôt que "else if".
· Les mots clés "break" et "continue" de C deviennent en Perl "last" et "next",
respectivement. Contrairement à C, ceux-ci ne pas travailler dans une construction "do { } while". Voir
"Loop Control" dans perlsyn.
· L'instruction switch est appelée "donné/quand" et n'est disponible que dans perl 5.10 ou plus récent.
Voir « Instructions de commutation » dans perlsyn.
· Les variables commencent par "$", "@" ou "%" en Perl.
· Les commentaires commencent par "#", pas "/*" ou "//". Perl peut interpréter les commentaires C/C++ comme
les opérateurs de division, les expressions régulières non terminées ou l'opérateur défini-ou.
· Vous ne pouvez pas prendre l'adresse de quoi que ce soit, bien qu'un opérateur similaire en Perl soit le
barre oblique inverse, qui crée une référence.
· "ARGV" doit être en majuscule. $ARGV[0] est le "argv[1]" de C et "argv[0]" se termine par $0.
· Les appels système tels que relier(), dissocier(), Renommer(), etc. renvoie une valeur non nulle en cas de succès, non
0. (système(), cependant, renvoie zéro en cas de succès.)
· Les gestionnaires de signaux traitent les noms de signaux, pas les numéros. Utilisez "kill -l" pour trouver leur
noms sur votre système.
JavaScript Pièges
Les programmeurs JavaScript judicieux doivent prendre note des éléments suivants :
· En Perl, le "+" binaire est toujours une addition. "$string1 + $string2" convertit les deux chaînes
aux nombres, puis les ajoute. Pour concaténer deux chaînes, utilisez le "." opérateur.
· L'opérateur unaire "+" ne fait rien en Perl. Il existe pour éviter la syntaxe
ambiguïtés.
· Contrairement à "for...in", le "for" de Perl (également orthographié "foreach") n'autorise pas la main gauche
côté être une expression arbitraire. Il doit s'agir d'une variable :
pour ma variable $ (clés %hash) {
...
}
De plus, n'oubliez pas les "clés" là-dedans, car "foreach my $kv (%hash) {}" itère
sur les clés et les valeurs, et n'est généralement pas utile ($kv serait une clé, puis un
valeur, etc.).
· Pour parcourir les indices d'un tableau, utilisez "foreach my $i (0 .. $#array) {}".
"foreach my $v (@array) {}" itère sur les valeurs.
· Perl requiert des accolades après "if", "while", "foreach", etc.
· En Perl, "else if" s'écrit "elsif".
· "? :" a une priorité plus élevée que l'affectation. En JavaScript, on peut écrire :
état ? faire_quelquechose() : variable = 3
et la variable n'est affectée que si la condition est fausse. En Perl, vous avez besoin
parenthèses :
$condition ? faire_quelquechose() : ($variable = 3);
Ou utilisez simplement "si".
· Perl requiert des points-virgules pour séparer les instructions.
· Les variables déclarées avec "my" n'affectent que le code après la déclaration. Vous ne pouvez pas écrire
"$x = 1; mon $x;" et attendez-vous à ce que la première affectation affecte la même variable. Ce sera
à la place, affecter à un $x déclaré précédemment dans une portée externe, ou à un global
variable.
Notez également que la variable n'est pas visible jusqu'à ce que le suivant déclaration. Ça signifie
que dans "mon $x = 1 + $x" le deuxième $x fait référence à celui déclaré précédemment.
· Les variables "my" sont étendues au bloc actuel, pas à la fonction actuelle. Si tu
écrivez "{my $x;} $x;", le second $x ne fait pas référence à celui déclaré à l'intérieur du
bloque.
· Les membres d'un objet ne peuvent pas être rendus accessibles en tant que variables. Le Perl le plus proche
équivalent à "with(object) { method() }" est "for", qui peut alias $_ à l'objet :
pour ($objet) {
$_->méthode ;
}
· L'objet ou la classe sur laquelle une méthode est appelée est passé comme l'un des
arguments, pas comme une valeur "this" distincte.
Soif Pièges
Chevronné sed les programmeurs doivent prendre note des éléments suivants :
· Un programme Perl s'exécute une seule fois, pas une fois pour chaque ligne d'entrée. Vous pouvez faire un
boucle implicite avec "-n" ou "-p".
· Les références arrière dans les substitutions utilisent "$" plutôt que "\".
· Le modèle correspondant aux métacaractères "(", ")" et "|" ne pas avoir de barres obliques inverses dans
de face.
· L'opérateur de plage est "...", plutôt qu'une virgule.
coquille Pièges
Les programmeurs shell Sharp doivent prendre note des éléments suivants :
· L'opérateur backtick fait une interpolation variable sans tenir compte de la présence de
guillemets simples dans la commande.
· L'opérateur backtick ne traduit pas la valeur de retour, contrairement csh.
· Coquillages (surtout csh) effectuent plusieurs niveaux de substitution sur chaque ligne de commande. Perl
fait la substitution dans seulement certaines constructions telles que les guillemets doubles, les backticks, l'angle
crochets et modèles de recherche.
· Les shells interprètent les scripts petit à petit. Perl compile tout le programme
avant de l'exécuter (sauf pour les blocs "BEGIN", qui s'exécutent à la compilation).
· Les arguments sont disponibles via @ARGV, pas $1, $2, etc.
· L'environnement n'est pas automatiquement mis à disposition en tant que variables scalaires distinctes.
· Le "test" du shell utilise "=", "!=", "<" etc pour les comparaisons de chaînes et "-eq", "-ne",
"-lt" etc pour les comparaisons numériques. C'est l'inverse de Perl, qui utilise "eq", "ne",
"lt" pour les comparaisons de chaînes et "==", "!=" "<" etc. pour les comparaisons numériques.
Perl Pièges
Les programmeurs Perl pratiquants doivent prendre note des points suivants :
· N'oubliez pas que de nombreuses opérations se comportent différemment dans un contexte de liste que dans un
un scalaire. Voir perldata pour plus de détails.
· Évitez les mots nus si vous le pouvez, surtout ceux en minuscules. Vous ne pouvez pas dire simplement
en regardant si un mot nu est une fonction ou une chaîne. En utilisant des citations sur
chaînes et parenthèses sur les appels de fonction, vous ne les confondrez jamais.
· Vous ne pouvez pas discerner par simple inspection quelles fonctions intégrées sont des opérateurs unaires (comme
hacher() et chdir()) et qui sont des opérateurs de liste (comme impression() et dissocier()). (Sauf si
des sous-programmes prototypés définis par l'utilisateur peuvent uniquement être des opérateurs de liste, jamais unaires.)
Voir perlop et perlsub.
· Les gens ont du mal à se rappeler que certaines fonctions par défaut sont $_, ou @ARGV, ou
quoi que ce soit, mais que d'autres que vous pourriez vous attendre à ne pas faire.
· Les construct n'est pas le nom du descripteur de fichier, c'est une opération readline sur
cette poignée. Les données lues sont affectées à $_ uniquement si le fichier lu est le seul
condition dans une boucle while :
tandis que ( ) { }
tandis que (défini($_ = )) { }..
; # données supprimées !
· N'oubliez pas de ne pas utiliser "=" lorsque vous avez besoin de "=~" ; ces deux constructions sont assez différentes :
$x = /toto/;
$x =~ /foo/;
· La construction "do {}" n'est pas une vraie boucle sur laquelle vous pouvez utiliser le contrôle de boucle.
· Utilisez "my()" pour les variables locales chaque fois que vous pouvez vous en tirer (mais voir perlform pour
où vous ne pouvez pas). L'utilisation de "local()" donne en fait une valeur locale à une variable globale,
ce qui vous laisse ouvert aux effets secondaires imprévus de la portée dynamique.
· Si vous localisez une variable exportée dans un module, sa valeur exportée ne changera pas.
Le nom local devient un alias pour une nouvelle valeur mais le nom externe est toujours un alias
pour l'original.
Comme toujours, si l'un d'entre eux est officiellement déclaré comme bogue, il sera corrigé et
enlevé.
Utilisez perltrap en ligne en utilisant les services onworks.net
