J'ai vu de nombreuses façons d'exécuter du code ou des scripts Perl, avec différents indicateurs. Cependant, lorsque j'essaie de rechercher sur Google ce que signifie chaque indicateur, j'obtiens principalement des résultats sur des sites Perl génériques et aucune information spécifique concernant les indicateurs ou leur utilisation ne s'y trouve.
Voici les drapeaux que je rencontre le plus souvent, et je n'ai aucune idée de ce qu'ils signifient:
- perl -pe
- perl -pi
- perl -p
- perl -w
- perl -d
- perl -i
- perl -t
Je vous serai très reconnaissant si vous me disiez ce que chacun de ces éléments signifient et quelques cas d'utilisation pour eux, ou au moins me dire un moyen de découvrir leur signification.
perl
command-line
flags
Tudor Constantin
la source
la source
perldoc perlrun
a une liste de toutes les options de ligne de commande acceptées par Perl.Réponses:
Oui, Google est notoirement difficile pour rechercher des signes de ponctuation et, malheureusement, Perl ne semble être principalement composé de ponctuation :-)
Les commutateurs de ligne de commande sont tous détaillés dans perlrun . (disponible depuis la ligne de commande en appelant
perldoc perlrun
)Entrer brièvement dans les options, une par une:
la source
perldoc perlrun
. J'ai supprimé ma réponse. :-)-w
est généralement à éviter, en fait, car il active les avertissements pour tout le code, y compris les modules CPAN qui n'ont pas été écrits avec des avertissements à l'esprit. Les résultats sont généralement assez bruyants et inutiles.-w
est généralement évité, mais il doit être remplacé paruse warnings
dans votre propre code.use warnings
dans mon propre code, mais -w a une utilité - cela aide à éliminer les modules CPAN mal écrits. :-)-i
prend une extension pour la sauvegarde.-e
prend une commande perl. En-0ep
vous dites à perl que «p» est une commande perl au lieu d'un argument. Cela ne fonctionnera pas du tout.L'
-p
indicateur exécute essentiellement le script avec-e
vous permet de transmettre un script àSTDIN
-i
indique à l'interpréteur que toutes les données transmisesSTDIN
par le script en cours d'exécution doivent être effectuées sur place.-w
est identique àuse warnings;
, mais dans une portée globale plutôt que locale-d
exécute le débogueur Perlla source
-w
n'est pas tout à fait le même queuse warnings
, ce dernier est limité au fichier localD'autres ont mentionné perlrun. Si vous utilisez B :: Deparse, vous pouvez voir ce que cela signifie (pour la plupart des choses):
1 est représenté par «???», car il est optimisé.
-i définit $ ^ I, comme
Mais rappelez-vous que <ARGV> utilise 2 arguments open, donc ne pas avoir de noms de fichiers commençant par
> <
ou commençant / finissant par|
.la source
Il existe également un indicateur important
-n
qui n'est pas mentionné dans la liste.-n
fonctionne de la même manière que-p
, mais il ne s'imprime pas$_
par défaut. Cela peut être très utile pour filtrer les fichiers texte.De cette façon, Perl peut remplacer
grep | sed
en une seule ligne.Par exemple:
perl -ne 'print "$1\n" if /Messages read: (\d+)/' <my_input.txt
Affiche toutes les valeurs entières trouvées après "Messages lus:", et rien de plus.
la source
print $1
n'est pas la même chose queprint
(print $_
).echo abc | perl -nw -e "print if (1)"
imprimerabc
. Pas besoin de$1
référence.