Mémento rapide de traduction entre Perl, Python et Ruby

FIXME FIXME FIXME Les informations Perl et Ruby de cette page sont certifiées incomplètes voire fausses par incompétence du premier éditeur de la page. Ceci est une invitation aux personnes compétentes à modifier la page. Cette page est de toute façon incomplète en dehors de ça.

[la mise en page en tableau me semble assez inmaintenable, des sections sont donc utilisées pour l'instant]

What is Truth ?

Perl

Ces éléments sont faux :

  • 0
  • ""
  • () (car il est converti en le scalaire 0)
  • undef

Python

Ces éléments sont faux :

  • False
  • None
  • 0
  • ""
  • []
  • {}

Le comportement d'un objet peut être changé en modifiant sa méthode __nonzero__ ou sa méthode __len__ (dans cet ordre)

Ruby

Ces éléments sont faux :

  • false
  • nil

Structures de données basiques

Perl

  • Liste (pas une référence sur liste, i.e. pas comme Python ou Ruby) : @a = (); @a=(1, "2", 3);
  • Référence de liste (donc comme en Python et Ruby) : $a = []; $a = [1, "2", 3];
  • Hash (pas une référence, différent de Python ou Ruby) : %a = ("clef", "valeur", 1, "2") OU (écriture moins relou, plus lisible et plus maintenable) : %a = ( clef => "valeur", 1 => "2");
  • Référence de hash (comme pour python et ruby) : $a = {clef=>"valeur", 1 => "2"}
    • Note : les clefs sont automatiquement transformées en chaine

Python

  • Liste : [], [1, "2", 3]
  • Tuple (liste non modifiable) : (), (1,) (notez le tuple-singleton), (1, "2", 3)
  • Hash : {"clef": "valeur", True: 3}
    • Les clefs doivent être des objets non modifiables ou des compositions d'objets non modifiables : nombres, chaines, tuples, booléens, None
    • On ne peut ajouter d'élément ou mettre un un élément à la place d'un autre dans le tuple

Ruby

  • Liste : [], [1, "2", 3]
  • Hash : {"clef", "valeur", 1, "2"}

Structures de contrôle

if/else

Perl
if (condition) {
 
} elsif (condition) {
 
} else {
 
}

On ne fait pas

if (condition)
    code;

Mais

code if (condition);

unless peut être utilisé en cas de logique inversée if not condition ou if ! condition. La différence entre ! et not est juste la priorité des operateurs voir perlop(1)

if (!condition) == if (not(condition)) == unless(condition)
 
code if (!condition) == code if(not(condition)) == code unless(condition)

Modification : TIMTOWTDI (There Is More Than One Way To Do It)

Python
if condition:
    # code
elif condition:
    # code
else:
    # code

Les retours à la ligne sont fortement recommandés.

On peut aussi faire

if condition: une_ligne
elif condition: une_ligne
else: une_ligne

comme pour les autres langages, mais cette pratique n'est pas recommandée

Notation ternaire

x = 1 if True else 2
Ruby
if condition then
    # code
elsif condition then
    # code
else
    # code
end

Les then sont facultatifs si l'on a des retours à la ligne.

FIXME notation “ternaire” implicites, car Ruby contient beaucoup d'“expressions” (à opposer aux “instructions”)

Boucle d'entiers

Perl
for my $i (1..N) {
  #code
}
Python
for i in xrange(N):
    # code
Ruby
N.times { |i|
    # code
}

ou

N.times do |i|
    # code
end

Définir une fonction

Perl
sub mafonction {
    # les arguments sont dans @_
    ($a, $r, $g, $uments) = @_;
}
Python
def mafonction(a, r, g, uments):
    # code
Ruby
def mafonction(a, r, g, uments)
    # code
end
rosette_plpyrb.txt · Last modified: 2011/04/20 15:51 by xcombelle
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0