Des codes sources perlConsultez toutes les FAQ
Nombre d'auteurs : 13, nombre de questions : 59, dernière mise à jour : 27 mai 2011
- Comment participer à la liste des codes unilignes ?
- Utilise-t-on des simples ou double quotes dans les unilignes ?
- 7.1. Traitements de fichiers
(11)
- Comment supprimer les ^M dans un fichier pour le rendre compatible Unix/Mac/Linux/Windows ?
- Comment supprimer les lignes doublons dans un fichier ?
- Comment effectuer des remplacements dans un fichier ?
- Comment afficher des colonnes particulières depuis un fichier de type csv (tableau texte) ?
- Comment inverser tous les octets d'un fichier ?
- 7.1.1. Insertion de lignes dans un fichier
(6)
- Insérer une ligne dans un fichier, à une position donnée
- Insérer une ligne dans un fichier, avant chaque ligne correspondant à une regex
- Insérer une ligne dans un fichier, après chaque ligne correspondant à une regex
- Insérer une ligne dans un fichier, après la n-ième ligne correspondant à une regex
- Insérer une ligne dans un fichier en plusieurs positions
- Insérer une ligne dans un fichier, après certaines occurrences de lignes correspondant à une regex
- 7.2. Web (1)
- 7.3. Divers (1)
Vous trouvez une erreur, vous avez des remarques à effectuer ou si vous souhaitez partager une liste de codes unilignes perl, n'hésitez pas et postez le ici : 92 commentaires
- Sous Linux/Unix
Sous une console Linux/Unix, vous devez utiliser des simples quotes. Exemple :
#perl -e '$pseudo = 'djibril'; print $pseudo;'
djibril
C:\>perl -e "$pseudo = 'djibril'; print $pseudo;"
syntax error at -e line 1, near "="
Execution of -e aborted due to compilation errors.
En fait, le programme a subi une interpolation de la variable $pseudo. Perl a donc compris = 'djibril'; au lieu de $pseudo = 'djibril';.
S'il y avait une variable d'environnement s'appelant pseudo, Perl l'aurait interprété autrement.
Si vous tenez absolument à utiliser des guillemets, protégez votre variable avec un \.
# perl -e "\$pseudo = 'djibril'; print \$pseudo;"
djibril
L'écriture est un peu moins évidente et compréhensive.
- Sous Windows
Sous une console DOS Windows, vous devez utiliser des double quotes sous peine d'avoir un message d'erreur. Exemple :
C:\>perl -e '$pseudo = 'djibril'; print $pseudo;'
Can't find string terminator "'" anywhere before EOF at -e line 1.
C:\>perl -e "$pseudo = 'djibril'; print $pseudo;"
djibril
- Sous Windows - Cygwin
Le comportement du Shell est semblable à celui d'Unix, donc utilisez des simple quotes.
- Astuces à connaître
Perl vous donne la possibilité d'utiliser 3 fonctions de remplacement des guillemets simples, doubles ou renversés : qq, q et qx.
Fonction | Remplacement | Interpolation |
---|---|---|
qq{} | " | oui |
q{} | ' | non |
qx{} | `` | oui |
perl -e '$pseudo = q{djibril}; print qq{Pseudo : $pseudo\n};'
Pseudo : djibril
# perl -e 'print qx{ls -alh /home}'
total 1.0K
drwxr-xr-x 4 root root 104 Mar 4 08:38 .
drwxr-xr-x 21 root root 512 Mar 11 10:27 ..
drwxr-xr-x 8 djibril djibril 584 Mar 4 10:00 djibril
Attention : Sous Unix et Cygwin, on ne peut pas utiliser des quotes simples pour délimiter des chaînes non interprétables dans un uniligne défini avec des quotes simples. Ainsi, pour :
perl -e '$pseudo = 'djibril'; print $pseudo;'
ça fonctionne car la chaîne djibril ne contient aucun caractère interprétable du Shell. En revanche, ça ne fonctionne plus dès lors qu'on utilise :
perl -e '$pseudo = 'djibril'; print 'pseudo' ;'
ou encore
perl -e '$pseudo = 'djibril'; print '$pseudo=', $pseudo, "\n";'
Si l'on utilise la quote simple pour l'uniligne, il faut impérativement utiliser q{} pour définir des chaînes littérales non interprétables :
perl -e '$pseudo = q{djibril}; print q{$pseudo=}, $pseudo, "\n";'
Pour en savoir plus sur ces fonctions, regardez la documentation officielle :
- man perlop sous Linux/Unix ;
- perldoc perlop sous Windows.