Mémo Perl
Last edited March 17, 2009
More by pandelis »
dvd

Script de base

$,="\t";
$"="\t"; #"
open(UN,"<$ARGV[0]");
while(<UN>){
    chomp;
    @F=split("\t");
    if ($F[29] ne ""){print @F;print "\n";}
   
}
close(UN);
Perl

Faire un exe

PAR
http://articles.mongueurs.net/magazines/
Record Separator RS
$/=""

Ouvrir un fichier unicode

open(FH, "< :encoding(UTF-8)", $_)
Ouvre et écrit en unicode
use open ':utf8';

Tranche de ligne (imprimer ou stocker)
print @F[1,3];
print @F[1 .. @F];
$ligne = "@F[1 .. @F]";

Format Mac
$/ = "\x0d";

Imprimer sur la sortie standard (entrée standard: STDIN)
print STDOUT "bonjour"

Selectionner une sortie
select LOG
print "bonjour";

Parcourir un tableau
foreach $i (@a){}
for ($i=0;$i<@a;$i++){

Parcourir un hachage
foreach $i (keys %a){}
while (($key,$value) = each(%a){}

Nombre d'entrées dans un hachage
$num_Cara = scalar keys %hach; 

Parcourir toutes les lettres d'une chaîne
@Lettres = split("",$F[0]);
for ($i=0;$i<@Lettres;$i++){  }       

Rexexp

Remplacer les accents français
$F[$lem] =~   tr/éèêëàäâïîöôüûùçÀÂÄÇÈÉÊËÎÏÔÖÙÛÜ/eeeeaaaiioouuucAAACEEEEIIOOUUU/;
Consonnes du français
BCDFGHJKLMNPQRSTVWXZÇ
bcdfghjklmnpqrstvwxzç


Enlever les accents du monde entier
tr/ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ/aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn/;

Caractères hexadécimaux
s/\x0d//g;

Expression régulières minimales:

* -> *?
+ -> +?

Remplacer du texte
$destination = $source;
$destination =~ s/ceci/cela/g;

Remplacer " chien " par "chien"
$_ =~ s/ " ([^"]*) " / "$1" /g

Compter le nombre d'occurences d'un pattern
$nombre = ($F[0] =~ s/pat/pat/g); (sais pas si marche)
$count = @{[$string =~ /$match/g]}; (semble marcher)

Extraire qq chose (un nombre) d'une expression rationnelle
if ($_=~ /.*output.*:.*([0-9]{1,})/; $nboutput = $1;}
($mot) = ($lines[$i+1] =~ /^(.*?)\t/);

Search for french words
s/^-//g;
s/\W\-//g;
while (/([àâéèêëîïôöùûüçÀÂÉÈÊËÎÏÔÖÙÛÜÇA-Za-z-]+)/g) {
print $1;}

Virer les caractères qui ne sont pas des lettres
s/^W//g;

Use french locale (on a french windows)
use locale;
Fichiers

Parcourir tous les fichier d'un dossier
opendir(REP, "$ARGV[0]");
@liste = grep { /.cnr$/ }readdir(REP);
for $file(@liste){

open(INPUT,"<./$ARGV[0]/$file");
while(<INPUT>){

Parcourir tous les fichiers d'un dossier récursivement
@ARGV = qw(.) unless @ARGV;
use File::Find;
find sub {

if ($File::Find::name =~ /.cha$/){
open(FH, "< :encoding(UTF-8)", $_)
while(<FH>){blabla}

}, @ARGV;

Parcourir 2x le même fichier
open(UN,"<$ARGV[0]");
while(<UN>){
}
close(UN);
open(DEUX,"<$ARGV[1]");
while(<DEUX>){
}
close(DEUX); 

Ecrire dans un fichier particulier
open(ABSTRACT,">$abstract");
print ABSTRACT "blabla";

Changer l'extension du fichier
$nomfi=$ARGV[0];
$nomfi=~s/\..*$//;
$nomdef=$nomfi.".def";

Déplacer un fichier
ATTENTION! Le fichier doit être fermé !!!
chdir("$ARGV[0]");
move("$file", "..\\fichierspb\\$file");

Aller à la prochaine ligne
LINE:
while (<>) {next LINE;}

Détecter la fin d'un fichier
if (eof()) {print "C'est la fin";}

Ecrire un fichier unix (linux)
$CRLF = "\x0d\x0a";
print "blabla"; print "$CRLF";

Copier des fichiers à un autre endroit
use File::Copy;
$newname = "..\\temp\\".$newname ;
copy($nomfic, $newname);
Autre méthode (si ça marche pas)
 $newfile = "__autres.pays\\".$newname ;
 system("move /Y $file2 $newfile");

 

Passer des arguments
use Getopt::Std;
getopt("c");
$opt_c;

Envoyer une commande

`sed -i "/FIN BLOC (PRESENTATION)/,/<\\/body>/d" $i`;
$sortie=`anagram --bindict ¢¢E:/Anagram/words.bin ==¯¯ able`;
!!!Attention aux / qu'il faut double slasher

Faire du globbing
@fichiers = glob("*.htm");
perl -pi '.bak' -e 's/<.*?>.*?<\/.*?>//' K*.xml (il faut utiliser Cygwin car djbash a des pb de mémoire)

Imprimer avec un 2 chiffres après la virgules
printf "%s\t%.0f\t%.2f","$sub_num","$moy","$et";

Convertir un nombre en arrondi
$rounded = sprintf("%FORMATf", $unrounded);

Remplacements en ligne de commande
perl -pi'.bak' -e 's/<.*?>.*?<\/.*?>//' K*.xml
perl -pi'orig_*' -e 's/<.*?>.*?<\/.*?>//' K*.xml
-p écrit les lignes
-n ne les écrit pas sans print

One-liners

http://www.unixguide.net/unix/perl_oneliners.shtml ==¯¯
N'imprimer que si ça match
perl -i'.bak' -ne 'print "$1\n" if $_ =~ /(http.*rar)/ ' *.htm
who | perl -aF"\t" -lpe '$_ = $F[0]'
#!/usr/bin/perl
$\ = $/; # from -l
while (<>) { # from -p

chomp; # from -l
@F = split; # from -a
$_ = $F[0]; # argument to -e
print; # from -p

Autres

Chercher un package
http://ppm.activestate.com/PPMPackages/zips/

Installer un package à partir du dd (si il est dans C:)
Décompresser le zip, aller dans le dossier ou vous l'avez décompressé
ppm install ¢¢c:/fichier.ppd ==¯¯

Installer / Utiliser PAR
Pour l'installer, le télécharger sur activestate
J'ai essayé install manuelle mais ça ne marche pas
pp -o hello.exe hello.pl 

Arrondir un nombre
$b = sprintf("%.2f", $a);

Time a process
sub concord {$compte = 0;}
timethese(10, {concord => 'concord()'});
This will measure the concord func ten times 
The content on this page is provided by a Google Notebook user, and Google assumes no responsibility for this content.