Perl en ligne de commande

Posté par . Modéré par Pascal Terjan.
Tags : aucun
0
21
mar.
2003
Perl
Deux articles de developerWorks sont consacrés à l'utilisation de Perl en ligne de commande ou comment réaliser en une seule ligne de Perl ce qui nécessiterait 10 fois plus de code dans la plupart des langages.
Une introduction aux one-liners donc, qui illustrent une des facettes de cet excellent langage qu'est le Perl, autrement dit une des multiples façons d'utiliser la "tronçonneuse suisse" ;)

NdM: le premier article a deux ans.

Aller plus loin

  • # Re: Perl en ligne de commande

    Posté par . Évalué à 10.

    perl -lane 'print $F[0] + $F[-2]'

    devient en Ruby
    ruby -ne 'puts split[0]+" "+split[-2]'

    perl -ne 'print if 15 .. 17'
    -> ruby -ne 'puts if 15..17'

    perl -ne 'print unless 10 .. 20'
    -> ruby -ne 'puts unless 15..17'

    perl -ne 'print if /^START$/ .. /^END$/'
    -> je sais pas le faire :-( (en une ligne)

    perl -ne 'print unless /^START$/ .. /^END$/'
    -> idem :-((

    perl -ne 'print if $. >= 15; exit if $. >= 17;'
    -> ruby -ne 'puts $_ if $. >= 15; exit if $. >= 17'

    etc etc ...

    C juste histoire de montrer aux Perleur que Ruby est aussi pratique. Et aux Pythons codeurs que l'on peut faire de l'objet sans se prendre la tête.
    • [^] # Re: Perl en ligne de commande

      Posté par . Évalué à 10.

      D'ailleurs il existe un petit comparatif de la syntaxe de base des deux langages : http://www.math.umd.edu/~dcarrera/perl_ruby/(...)
      • [^] # Re: Perl en ligne de commande

        Posté par . Évalué à 4.

        dans le meme genre mais basé sur les exemples du perl cookbook mais avec beaucoup plus de langage http://pleac.sourceforge.net/ par c est pas encore fini
    • [^] # Re: Perl en ligne de commande

      Posté par . Évalué à 0.

      Encore qq une translates parce qu'elles sont amusantes (les autres sont possibles aussi mais elles m'ennuient).

      perl -e 'print reverse <>' file1 file2 file3
      -> cat file1 file2 file3 | ruby -e 'puts $stdin.readlines.reverse'

      perl -nle 'print scalar reverse $_' file1 file2 file3 ....
      -> ruby -ne 'print $_.reverse' file1 file2 file3 ...

      perl -lne '$_ = lc $_; print if $_ eq reverse' /usr/dict/words
      -> ruby -ne 'print $_ if $_ == $_.reverse'
    • [^] # Re: Perl en ligne de commande

      Posté par . Évalué à -1.

      Ouais, sauf que sur la plupart des machines auxquelles j'ai accès --pas chez moi, hein-- ça donne:

      $ ruby
      bash: ruby: command not found

      J'aime autant retenir des commandes qui marchent à peu près partout, pas uniquement chez moi.

      Mais sur les qualités relatives des deux langages, j'ai aucun avis particulier.
      • [^] # Re: Perl en ligne de commande

        Posté par . Évalué à 10.

        Si tu vas par la, moi j'ai
        C:\> perl
        'perl' n'est pas reconnu [...]

        La morale de l'histoire est que ce n'est pas parce qu'il y a des outils plus répandu que d'autre qu'il faut s'en contenter s'il y a des solutions supérieures.

        Sinon pour perl vs ruby, je trouve ruby plus propre, a chaque fois que je veux écrire un script en perl je me cogne la tete contre les murs a cause des bizarrerie du language..
        • [^] # Re: Perl en ligne de commande

          Posté par . Évalué à 5.

          Moi aussi les gros projets perl me rebutent, je trouve que ca devient rapidement incomprehensible.
          Un autre avantyage de ruby est son coté tout objet, perso je trouve ça super pratique.
    • [^] # Re: Et aux Pythons codeurs que l'on peut faire de l'objet sans se prendre la tête.

      Posté par . Évalué à 0.

      tu peux élaborer ?
  • # Re: Perl en ligne de commande

    Posté par . Évalué à 3.

    Je me suis initié au Perl il y a pas longtemps et a vite abandonné car la syntaxe est assez... étrange et ne parlons pas des signes "cabbalistiques" (%,$,@...), les lourdeurs du langage... Bref, est-ce que le Ruby vaut vraiment le coup ou vaut-il mieux programmer en Python?? Merci.
    • [^] # Re: Perl en ligne de commande

      Posté par . Évalué à 2.

      Ruby vaut vraiment le coup !!! Son apprentissage est plus facile que celui de Python (et a fortiori à celui de Perl) Le livre de référence sur Ruby est en ligne et libre d'accès (http://www.rubycentral.com/book/). Le langage est très bien pensé, il allie la consision et l'expressivité de Perl à la construction objet de Python. En fait les avantages de Pythons sont : -un nombre plus important de librairies -plus répendu en occident que Ruby (au Japon c'est le contraire). En bref c'est le langage idéal pour faire du prototypage, de l'algorithmique, de l'admin système et réseau.
    • [^] # Commentaire supprimé

      Posté par . Évalué à 5.

      Ce commentaire a été supprimé par l'équipe de modération.

    • [^] # Re: Perl en ligne de commande

      Posté par . Évalué à 5.

      Python je ne connais pas, mais Ruby a selon moi l'avantage d'être très intuitif. En général, il fonctionne comme je pense qu'il devrait fonctionner. C'est dû en partie à l'usage intensif d'intérateurs, aux noms de méthodes clairs (les méthodes renvoyant un booleen se terminent par ?, par exemple). Quelques exemples: a = [ 1, 2, 3, 4, 5 ] a.each { |element|     puts element } f = File.new('toto', 'r') f.each { |ligne|     puts ligne } h = [ 'clé1' => 'objet1', 'clé2' => 'objet2' ] h.each_key { |cle|     puts cle } h.each_value { |val|     puts val } Histoire de dire que tous les objets fonctionnent plus ou moins de la meme manière, très logiquement. On a aussi des méthodes aux noms très explicites: i = 12 if i.between?(5, 20)     print "i est compris entre 5 et 20\n" else     print "i n'est pas compris entre 5 et 20\n" end Ainsi que la possibilité de définir des méthodes permettant d'accéder facilement aux attributs d'un objet: class Toto     def get_attr1         return @attr1     end     def set_attr1 (new_value)         if (tests de validité de new_value)             @attr = new_value         end     end end t = Toto.new t.set_attr1 blabla puts t.get_attr1 Peut être avantageusement remplacé par les méthodes suivantes: class Toto     def attr1         return @attr1     end     def attr1=(new_value)         if (tests de validité de new_value)             @attr = new_value         end     end end t = Toto.new t.attr1 = blabla puts t.attr1 Qui permettent d'accéder à attr1 à travers les méthodes d'accès, comme si c'était un simple attribut. Ruby dispose encore de plein d'autres outils pour rendre le code simple et clair, bref, un bon choix si tu cherches un langage puissant et elegant.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.