Navigation rapide : Lundi / Mardi / Mercredi / Jeudi / Vendredi Mémos : Perl / Python / Ruby

Pragma

use strict ;      # oblige les déclarations
use warnings ;

Utilisation de modules

use Data::Dumper ;
use File::Handle ;

Variables et expressions

variables scalaires

my $i, $s ;
$i = 1 ;
$s = "bye" ;
my $i = 1 ;
my $s = "bye" ;
my ($i,$s) = (1,"bye") ;
$s2 = "Bye $s world" ;      # Bye bye world
$s2 = 'Bye $s world' ;      # Bye $s world

opérateurs

opérateurs numériques

+ - * / % **
++ --
$x = 3 ;
print $x**4 ;        # 81
print $x++ ;         # 3
print $x ;           # 4
print ++$x ;         # 5
print $x ;           # 5

opérateurs chaînes de caractères

x .
\U \L
$s = "abc" ;
$i = 3 ;
 
print $i.$s.$i ;        # "3abc3"
 
print "$i$s$i" ;        # "3abc3"
print "$sxyz" ;         # ??
print "${s}xyz" ;       # abcxyz
 
print $s x $i ;         # "abcabcabc"
 
print "\U$s" ;          # "ABC"

opérateurs relationnels

== != <  >  <= >= <=>              # pour les nombres
eq ne lt gt le ge cmp              # pour les chaînes
print 1 <=> 2 ;                  # -1
print 2 <=> 2 ;                  # 0
print 1 <=> 2 ;                  # 1
print "ab" cmp "ac" ;            # -1
print "ab" cmp "ab" ;            # 0
print "ac" cmp "ab" ;            # 1

opérateurs logiques

|| or
&& and
!  not
? :
$min = $x<$y ? x : y ;          # min($x,$y)

affectations

=
+= -= *= /= %= **=

tableaux et listes

 1: my @l1 = (1, 2.1, "trois") ;
 2: print scalar(@l1) ;                     # 3 (nombre d'éléments)
 3: print $#l1 ;                            # 2 (indice du dernier élément)
 4:
 5: for $i (@l1) { print "$i " }            # 1 2.1 trois
 6:
 7: $l1[1] = 4 ;                            # 1 4 trois
 8:
 9: pop @l1 ;                               # trois
10:                                         # @l1 = (1 4)
11:
12: push @l1,('trois',5) ;                  # 1 4 trois 5
13:
14: shift @l1 ;                             # 1
15:                                         # @l1 = (4 trois 5)
16:
17: unshift @l1,"six" ;                     # six 4 trois 5
18:
19: ($a,$b,@l3) = @l1 ;                     # $a=six, $b=4,
20:                                         # @l3 = (trois 5)
21:
22: @l2 = ( "a",@l1,"b" ) ;                 # a six 4 trois 5 b
use Data::Dumper ;
print Dumper @l1,@l2 ;
($a,$b,$c) = (1,"a",2) ;            # $a=1  $b="a"   $c=2
($d,@e) = (1,2,3,4) ;               # $d=1  $e=(2 3 4)
($f,@e) = @e ;                      # équivalent à $f=pop(@e)
$l = @e ;                           # $l=2 (contexte scalaire -> nombre d'éléments)
@l = @e ;                           # @l=(3 4) (contexte de liste)
@l = (0,1) ;                        # (0 1)
$l[4] = 4 ;                         # (0 1 undef undef 4)

hashes

 1: my %h = {z=>1, y=>"deux", x=>3.0 } ;
 2:
 3: $h{1} = 4 ;                                          # y=>"deux" z=>1 x=>3.0 1=>4
 4: $h{y} = 2 ;                                          # y=>2 z=>1 x=>3.0 1=>4
 5:
 6: delete $h{z} ;                                       # y=>2 x=>3.0 1=>4
 7:
 8: @k = keys %h ;                                       # (y,x,1)
 9:
10: @v = values %h ;                                     # (2,3.0,4)
11:
12: for $k (keys %h) { print "($k→$h{$k}) "; }           # (y→2) (x→3.0) (1→4)
use Data::Dumper ;
print Dumper %h ;

références

 1: my $l1 = [1, 2.1, "trois"] ;
 2: for $i (@$l1) { print "$i " }
 3:
 4: $l1->[1] = 4 ;                                   # 1 4 trois
 5: @l2 = ( "a",$l1,"b" ) ;                          # a \(1 4 trois) b
 6:
 7: my $h = [z=>1, y=>"deux", x=>3.0] ;
 8:
 9: $h->{y} = 2 ;                                    # y=>2 z=>1 x=>3.0
10:
11: @k = keys %$h ;                                  # (y,x,x)
12:
13: @v = values %$h ;                                # (2,1,3.0)
14:
15: for $k (keys %$h) { print "($k→$h->{$k}) "; }    # (y→2) (x→3.0) (z→1)

Expressions régulières

=~       # match ?
!~       # ne match pas ?
1: $s = " a = 5 " ;
2:
3: if ($s =~ /^\s*\S+\s*=\s*\S+\s*$/) {}
4:
5: ($a,$b) = $s=~/^\s*(\S+)\s*=\s*(\S+)\s*$/ ;      # $a → "a", $b → "5"
6:
7: $s =~ s/\s//g ;                                  # $s → "a=5"

Structures de contrôle

instructions conditionnelles

1: if () {}
2:if# print $i if defined($i)
3:
4: unless () {}
5:unless# print $i unless $i==0
6:
7: if () {} else {}
8: if () {} elsif () else {}

instructions itératives

 1: while () {}
 2:while# print $i while $i<100 ;
 3: do {} while 4:
 5: for (;;) {}
 6: for $var (@liste) {}
 7:
 8: while ()
 9: {
10:11:   next if12:13:   last if14: }

Définition et appel de fonctions

paramètres

1: sub f
2: {
3:   ($a,$b) = @_ ;
4:5: }
6: f(1.2,"tagada") ;
 1: sub f
 2: {
 3:   my (@p1,@p2) = @_ ;
 4:
 5:   # @p1 → (1,2,3,4,5)
 6:   # @p2 → ()
 7: }
 8:
 9: @l1 = (1,2,3) ; @l2 = (4,5) ;
10: f(@l1,@l2) ;
 1: sub f
 2: {
 3:   my ($p1,$p2) = @_ ;
 4:
 5:   # $p1 → [1,2,3]
 6:   # $p2 → [4,5]
 7: }
 8:
 9: @l1 = (1,2,3) ; @l2 = (4,5) ;
10: f(\@l1,\@l2) ;

retour

1: sub f
2: {
3:4:   return -1 ;
5:6: }
7:
8: $i = f() ; # $i → -1
1: sub f
2: {
3:4:   -1 ;                 # dernière instruction évaluée
5: }
6:
7: $i = f() ;             # $i → -1

Lecture/écriture de fichiers

lecture

1: while (<>)                                                    # lit sur stdin
2: {
3:   print ;                                                     # équivalent à: print $_ ;
4: }
 1: use FileHandle ;
 2: my $fh = new FileHandle("/etc/passwd") or die $! ;
 3: while (<$fh>)
 4: {
 5:   chomp ;                                                     # supprime le \n final
 6:   s/#.*$// ;                                                  # supprime les commentaires
 7:   next unless /\S/ ;                                          # ignore ligne vide
 8: 9: }
10: $fh->close() ;
$l = <$fh> ;         # lit une ligne (contexte scalaire)
$@ = <$fh> ;         # lit toutes les lignes restantes (contexte de liste)

écriture

1: use File::Handle ;
2: my $fh = new File::Handle(">/tmp/toto") or die $! ;
3: for $l (@l)
4: {
5:   $fh->printf("%d: %s\n",$i++,$l) ;
6: }
7: $fh->close() ;

heredoc

$s = << "EOS" ;
bla bla
bla blabla bla
bla blabla blabla bla
EOS

Processus

system("ls -l /") ;
print << `EOSHELL`
cd /var/log
tail messages
EOSHELL
for (`ls -l /`)
{
  print ;                 # chaque ligne émise par la commande ls
}
$fh = new FileHandle("ls -l /|") ;   # récupère la sortie de la commande ls
while (<$fh>)
{
  print ;
}
$fh = new FileHandle("|sort") ;  # envoie dans le filtre Unix sort
for $line (@l)
{
  $fh->print $line ;
}

POO

classes

 1: # fichier Url.pm
 2:
 3: package Url ;
 4:
 5: require Exporter ;
 6: our @ISA = qw(Exporter);
 7: our @EXPORT=qw() ;
 8:
 9: sub new                            # constructeur
10: {
11:   my($type,$s) = @_ ;
12:   my($this) ;                       # le futur objet
13:
14:   $this->{url} = $s ;              # initialisation
15:   $this->{} =;
16:
17:   bless $this,$type ;
18:   return $this ;
19: }
20:
21: sub get
22: {
23:   my ($this) = @_ ;
24:
25:   return wget($this->{url}) ;
26: }

objet

1: use Url ;
2:
3: my $u = new Url("http://www.insmi.fr",);
4: $u->get() ;

$Id: memoperlcore.txt 551 2012-05-20 07:17:51Z jaclin $

memoperlcore.txt · Last modified: 2012/05/20 09:17 (external edit)
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki