Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1653 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Trucs et astuces en Perl

n°2113329
gilou
Modérateur
Modzilla
Posté le 26-11-2011 à 00:41:07  profilanswer
 

Reprise du message précédent :
Bon, en fait, je ne recommande pas cette nouvelle version:
Certains modules manquent, en particulier Tk, et quand on veut les recompiler avec cpan, ça passe pas (pas mal de problèmes au niveau des makefiles et de l'environnement de compilation).
La précédente version était plus aboutie à mon avis.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le 26-11-2011 à 00:41:07  profilanswer
 

n°2143188
gilou
Modérateur
Modzilla
Posté le 21-05-2012 à 12:19:48  profilanswer
 

Une nouvelle version majeure de Perl est sortie (5.16) on en aura sans doute la traduction en version active state dans quelques mois, lorsque les  premières releases mineures et correctives auront été faites.
 
De plus, j'ai indique un bon bouquin gratuit et/ou payant, Modern Perl, en tête de topic.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2144600
the veggie​ boy
Hiromatsu-sama
Posté le 05-06-2012 à 10:57:29  profilanswer
 

Amusant, je suis justement tombé hier sur Modern Perl, très bien, et très actuel, effectivement.
 
Pour ceux qui comme moi ne connaîtraient pas, j'ai récemment découvert Dancer, un framework web en Perl : http://perldancer.org/
 
C'est vraiment très agréable à utiliser, je vous le recommande.
C'est plus simple que Catalyst, et plus propre (amha) que Mojolicious.


---------------
blacklist
n°2144697
gilou
Modérateur
Modzilla
Posté le 06-06-2012 à 01:11:36  profilanswer
 

J'ai juste eu le temps de survoler (déménagement en cours) et c'est assez éloigné de mes usages de Perl, mais ça a l'air sympa.  
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2147999
gilou
Modérateur
Modzilla
Posté le 03-07-2012 à 23:27:34  profilanswer
 

gilou a écrit :

Une nouvelle version majeure de Perl est sortie (5.16) on en aura sans doute la traduction en version active state dans quelques mois, lorsque les  premières releases mineures et correctives auront été faites.

Je viens de voir que c'est dispo chez ActiveState (Bien que ce soit toujours la 5.14 qui est proposée par défaut)
A+,  


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2148010
the veggie​ boy
Hiromatsu-sama
Posté le 04-07-2012 à 09:08:28  profilanswer
 

gilou a écrit :

J'ai juste eu le temps de survoler (déménagement en cours) et c'est assez éloigné de mes usages de Perl, mais ça a l'air sympa.  
A+,


Perso je m'en sers pour avoir rapidement une interface graphique autour de scripts déjà développés. C'est plus rapide et moins moche que Tk par exemple.
Et la partie serveur web est 'auto-contenue' dans le script, donc pas besoin de faire tourner des Apache ou autres par exemple.


---------------
blacklist
n°2148022
gilou
Modérateur
Modzilla
Posté le 04-07-2012 à 10:05:19  profilanswer
 

Citation :

Perso je m'en sers pour avoir rapidement une interface graphique autour de scripts déjà développés. C'est plus rapide et moins moche que Tk par exemple.


Ah! La tu viens de déclencher méchamment mon intérêt (surtout vu comment le support de Tk est foireux avec Active State) Je vais certainement aller voir cela de plus près alors.
J'avais regardé s'il y avait des solutions pour avoir une interface XUI associée à du code Perl, mais j'avais rien trouvé de probant (XUL::Gui est pas terrible).
A+,


Message édité par gilou le 04-07-2012 à 10:12:59

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2149628
gilou
Modérateur
Modzilla
Posté le 17-07-2012 à 11:20:34  profilanswer
 

Une page de manuel pas inintéressante: Perl secret operators and constants
J'en utilise certains, et je les connaissais pas tous.
Par contre, il manque l'opérateur double slash qui fait un test de définitude.
$myvar // <expression> ;
qui équivaut à
defined($myvar) ? $myvar : <expression> ;
et dont un des dialectes courant est:
$mystring //= 'mytext';
 
A+,


Message édité par gilou le 17-07-2012 à 11:21:21

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2160756
gilou
Modérateur
Modzilla
Posté le 19-10-2012 à 12:17:21  profilanswer
 

Active Perl: version 5.16.1 (et non plus 5.16.0) chez Active State.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2161299
the veggie​ boy
Hiromatsu-sama
Posté le 24-10-2012 à 23:11:51  profilanswer
 

Tiens, je ne sais pas si tu connais Strawberry Perl.
 
C'est une distribution de Perl pour Windows dont le but est d'être le plus proche possible du legacy perl Unix.
 
Perso j'utilise ça sur un ordi du boulot qui n'a que Windows, et j'en suis très content.
 
Ce qui est super, c'est qu'ils ont des miroirs du CPAN, et donc tu peux installer tous les modules que tu veux avec un simple perl - MCPAN -e "install Foo::Bar" en ligne de commande, comme sous linux.
 
http://strawberryperl.com/


---------------
blacklist
mood
Publicité
Posté le 24-10-2012 à 23:11:51  profilanswer
 

n°2161344
gilou
Modérateur
Modzilla
Posté le 25-10-2012 à 11:46:57  profilanswer
 

gilou a écrit :

C'est quoi, la distribution normale?? Sur PC, je connais que deux distributions binaires de Perl: celle d'Active State et celle de Strawberry Perl.
Celle d'Active State a pour elle d'être assurée par une boite qui en vit entre autres, et a toujours sorti un produit de qualité, depuis plus de'une douzaine d'années. C'est la plus employée.

gilou a écrit :

Actuellement, soit un module est dans le base des PPMs (un peu plus de 13 000) actuellement et il s'installe, sauf conflit avec un autre module, et au vu du nb de conflits constatés sur 2000 modules, ça doit concerner 25 à 30 modules sur 13 000. Sur ces 25 à 30, la majorité des conflits portent sur des fichiers exemples portant un nom identique, et c'est aisément corrigeable, et quelques uns portent sur un module voulant faire régresser la version d'un autre module déjà installé, et la, j'apprécie le fait que le système d'active state le détecte, tout comme le fait qu'il détecte et installe les modules manquants dont dépend une installation.
Ce que ne sait pas faire le système d'Active State, c'est gérer l'installation de modules qui nécessitent une interactivité (ie l'installation va poser des questions à l'utilisateur).
Pour cela, et les modules qui ne sont pas dans les 13 000, il y a l'outil CPAN fourni par Active State, qui marche particulièrement bien, mais est moins simple à utiliser.
La combinaison PPM + CPAN permet habituellement d'installer tout module utile.
 
De toute façon, faudra m'expliquer qu'il y a mieux sur PC/Windows pour faire ça, parce que la seule autre solution compilée, c'est Strawberry Perl, et j'ai pas eu des échos que ça gère mieux l'install des modules.

:whistle:  
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2161368
the veggie​ boy
Hiromatsu-sama
Posté le 25-10-2012 à 14:26:40  profilanswer
 

:D my bad
 
suis très content de strawberry en tout cas, même pour gérer les innombrables dépendances de BioPerl, ça tourne comme sous linux :jap:


---------------
blacklist
n°2162362
gilou
Modérateur
Modzilla
Posté le 02-11-2012 à 20:08:03  profilanswer
 

Un truc que j'ai trouvé sur perlmonk:
Si on a un texte multiligne (par exemple contenant une page web en retour d'une requête), et qu'on veut le transformer en liste de lignes, il serait logique de faire:
my @lines = split /\n/, $text;
mais ce faisant, on perd les \n en fin de ligne.
Pour les conserver, il suffit de faire:
my @lines = split /^/, $text;
 
C'est une 'feature' de split: /^/ y est équivalent à /^/m (ça ne marche pas pour un $).
En mode multiligne /.../m, ^ désigne la position après un \n et $ la position avant (en plus de leurs valeurs de début et fin de champ, qui n'ont pas d'intérêt pour split).
 
A+,


Message édité par gilou le 02-11-2012 à 20:10:29

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2162558
the veggie​ boy
Hiromatsu-sama
Posté le 05-11-2012 à 12:48:21  profilanswer
 

Une newsletter hebdomadaire que je trouve intéressante : http://perlweekly.com/
 
Dernière publication : http://perlweekly.com/archive/67.html


---------------
blacklist
n°2163984
gilou
Modérateur
Modzilla
Posté le 14-11-2012 à 20:06:34  profilanswer
 

Une bonne lecture à tous ceux qui aiment les challenges en Perl: Perlgolf History
Un livre qui pose les problèmes et solutions des concours de code perl minimal en nombre de caractères pour résoudre un problème.
Les concours existent encore sur Anarchy Golf et Code Golf.
 
Note: C'est en comprenant cette réponse minimale au problème FizzBuzz (lister tous les nombres de 1 à 100 en imprimant Fizz s'il est divisible par 3, Buzz s'il est divisible par 5 et FizzBuzz s'il est divisible par 15) print+(Fizz)[$_%3].(Buzz)[$_%5]||$_,$/for 1..100 que je suis tombé sur ce livre et les sites de concours.
[j'en étais resté à print$_%3?$_%5?$_:Buzz:$_%5?Fizz:FizzBuzz,$/for 1..100 pour ce problème, soit 6 caractères de plus]
 
le + de print+(....) indique à print que la parenthèse n'est pas le celle du début d'une liste d'arguments.
(Fizz)[$_%3] c'est particulièrement élégant: (Fizz) est la liste contenant Fizz, et selon que $_ est divisible par 3 ou non, on aura (Fizz)[0] soit Fizz, évalué comme "Fizz" pour la concaténation, ou (Fizz)[1] soit rien, qui sera évalué undef pour la concaténation. Bon bien sur, ce code ne passe pas avec les options use strict; ou use warnings;
 
A+,


Message édité par gilou le 14-11-2012 à 21:02:53

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2166535
gilou
Modérateur
Modzilla
Posté le 04-12-2012 à 00:30:14  profilanswer
 

Perl 5.17.6 releasé. Il consiste surtout en correction de bugs sur certaines regexp, et il y a aussi le changement important (mais en principe transparent à l'utilisateur) suivant:

Citation :

Per process hash randomization
The seed used by Perl's hash function is now random. This means that the order which keys/values will be returned from functions like keys(), values(), and each() will differ from run to run.
This change was introduced to make Perl's hashes more robust to algorithmic complexity attacks, and also because we discovered that it exposes hash ordering dependency bugs and makes them easier to track down.

L'algo de hash interne a lui aussi changé.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2167191
the veggie​ boy
Hiromatsu-sama
Posté le 07-12-2012 à 11:44:59  profilanswer
 

C'est une bonne nouvelle ce random sur l'ordre des clés.
 
De toute façon, je fais quasi tout le temps un sort avant, et j'écris mes propres blocs de sorting selon l'usage que j'en fais. :jap:


---------------
blacklist
n°2169004
gilou
Modérateur
Modzilla
Posté le 22-12-2012 à 14:49:07  profilanswer
 

Tiens, je suis tombé hier sur un concept perl que je ne connaissais pas, le goto &name ou name est le nom d'une subroutine, et qui  
1) sort de la subroutine en cours
2) remplace son appel par celui de la subroutine de nom name avec pour paramètres la valeur de @_ courante lors de la rencontre du goto.
 
Ça permet de faire (entre autres) de la tail récursion sans empilement des appels récursifs, avec ici par exemple pour la fonction factorielle:
 

Code :
  1. sub rfac {
  2.  @_ = (@_[0]*@_[1], @_[1]-1);
  3.  return @_[0] unless (@_[1]) ;
  4.  goto &rfac;
  5. }
  6.  
  7. sub fac {
  8.  return @_[0] ? rfac(1, @_[0]) : 1;
  9. }


 
Bon bien sur, une version dérécursivée comme

Code :
  1. fac {
  2.  my ($val, $result) = (shift, 1);
  3.  $result *= $val-- while($val);
  4.  return $result ;
  5. }


est 7 à 8 fois plus rapide.  
 
A+,


Message édité par gilou le 22-12-2012 à 15:22:43

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2169665
gilou
Modérateur
Modzilla
Posté le 02-01-2013 à 23:39:11  profilanswer
 

Très bon interview de Damian Conway sur Perl 5, Perl 6 (annoncé comme enfin releasé pour dans 12 mois) etc ici: http://www.infoq.com/interviews/conway-perl
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2171057
gilou
Modérateur
Modzilla
Posté le 14-01-2013 à 12:28:01  profilanswer
 

Une présentation d'un réformateur qui veut réimplémenter perl sur une base de code plus moderne et utilisable: https://speakerdeck.com/stevan_litt [...] a-dead-end
Pas inintéressant.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2200510
gilou
Modérateur
Modzilla
Posté le 21-08-2013 à 17:06:43  profilanswer
 

Tiens, je viens de constater que Tk fait partie de la liste des modules supportés par la dernière version de Active Perl (5.16.3).
C'est une bonne chose à savoir, car parfois, seul Tkx est supporté par la version courante d'active perl, et c'est particulièrement lourd de faire le portage du module "à la main".
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2200541
the veggie​ boy
Hiromatsu-sama
Posté le 22-08-2013 à 09:29:30  profilanswer
 

Tous les slides de la YAPC::EU 2013
http://act.yapc.eu/ye2013/slides


---------------
blacklist
n°2256787
gilou
Modérateur
Modzilla
Posté le 28-04-2015 à 16:20:49  profilanswer
 

Tiens, quelques astuces sur lesquelles je suis tombé récemment.
 
Si pour une raison quelconque, on veut incorporer l'évaluation d'une expression à une chaine, une méthode est de déréférer l'appel à sa référence:
my $toto = 5;
print "Son double est: ${\(2 * $toto)} \n";
(Bon évidemment, print "Son double est: ", 2 * $toto, " \n"; est la forme qui s'imposerait ici, mais il y a sans doute des cas ou cette astuce est utile)
 
Une autre: si %hash est un hash, map {$hash{$_}} sort keys %hash; renvoie la liste des valeurs du hash, triées dans l'ordre des clés.  
 
A+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2257393
Alci
Posté le 05-05-2015 à 14:37:03  profilanswer
 

Dans le même genre pour transformer une chaine littérale en chaîne interpolée.

Code :
  1. my $a = 'test\ntest\n';
  2. eval "\$a = qq/$a/";
  3. print $a; # génère correctement les retours charriots


 
Ça peut servir après passage par une bibliothèque renvoyant des chaînes littérales avec les précautions d'usage s'il s'agit de données externes.


Message édité par Alci le 05-05-2015 à 14:37:20

---------------
BattleTag: Alci#2178 - C'est dans les vieux pots qu'on fait les meilleurs démos
n°2270797
the veggie​ boy
Hiromatsu-sama
Posté le 04-12-2015 à 13:44:50  profilanswer
 

Un peu de pub pour le projet de crowdfunding d'un bouquin sur Perl Dancer, super librairie/framework web en Perl : https://www.kickstarter.com/project [...] ncer-book/
 
:jap:


---------------
blacklist
n°2270967
gilou
Modérateur
Modzilla
Posté le 07-12-2015 à 15:41:40  profilanswer
 

Tiens, une petite astuce pas (encore) postée ici:
J'ai une liste de clés (donc sans éléments identiques) @keys, une liste de valeurs @values, de même taille que @keys.
Comment créer rapidement un hash %hash tel que $hash{$key[i]} soit $values[i].
On peut bien sur faire une boucle d'assignation, mais il y a plus direct:
@hash{@keys} = @values;
 
C'est particulièrement utile si on lit un fichier CSV de structure fixe, et qu'on veut coller les champs dans un hash:
my @field_names = qw(...);
my %hash;
....
while (<$file_handler> ) {
    @hash{@fields_names} = split /,/;
     ....
}
 
A+,


Message édité par gilou le 07-12-2015 à 15:42:25

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2271016
the veggie​ boy
Hiromatsu-sama
Posté le 07-12-2015 à 23:48:29  profilanswer
 

pas mal, en effet :jap: (je parse régulièrement des fichiers csv ou assimilés)


---------------
blacklist
n°2293702
gilou
Modérateur
Modzilla
Posté le 15-12-2016 à 16:00:52  profilanswer
 

Récemment, j'avais a extraire des infos (des prénoms) d'un fichier en utf8  (du XML) et (pour débugger) je voulais les afficher dans ma console Windows, ce qui donnait des trucs moches pour  les caractères accentués.
Apres avoir un peu ramé, j'ai fini par trouver comment faire et comme c'est pas évident, je poste l'info ici afin que tout le monde en profite:
 

Code :
  1. my $cp;
  2. if ($^O eq 'MSWin32') {
  3.     use Win32::Console;
  4.     $cp = Win32::Console::InputCP();
  5.     binmode(STDOUT, ":unix" );
  6.     Win32::Console::OutputCP(65001);
  7. }
  8.  
  9. # Votre code ici
  10.  
  11. if ($^O eq 'MSWin32') {
  12.     Win32::Console::OutputCP($cp);
  13. }


 
A+,


Message édité par gilou le 15-12-2016 à 16:01:51

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
Le répertoire courant de mon script perl est " / " ?!perl et interface graphique
[PERL] boucle imbriquéesPerl + LWP + Cookie
Utilisation d'un programme perl sous VBAProblème d'execution de module perl
[PERL] Lecture bufferisé sur socketProblème d'affichage perl
problem de recuperation du contenu d variable sous perlproblem de recuperation du contenu d variable sous perl
Plus de sujets relatifs à : Trucs et astuces en Perl


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)