IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

FAQ et rubrique Perl officielles !!! [FAQ]


Sujet :

Langage Perl

  1. #21
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Merci, modification faite
      0  0

  2. #22
    Membre confirmé
    Avatar de Schmorgluck
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2006
    Messages : 371
    Points : 558
    Points
    558
    Par défaut
    Quelques petites erreurs dans la section Tests sur les fichiers, à propos des informations renvoyées par stat : l'exemple de code pour en extraire les résultats est erroné. D'une part il comporte un scalaire de trop, $rdev, d'autre part, j'ai testé (pris d'un doute) cette syntaxe pour affecter des variables, mais elle ne fonctionne pas, il manque des parenthèses autour de la liste de scalaires.
    There's nothing like $HOME!
      0  0

  3. #23
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Merci pour ta remarque. Modification effectuée.
      0  0

  4. #24
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Pensez à contribuer à l'évolution de la FAQ :

    Demande d'une modification,
    Demande de rajouts de certaines informations qu'on aurait omis.
    Toute suggestion est la bienvenue, même si vous n'avez pas la réponse.
      0  0

  5. #25
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Je n'ai pas vérifié si la question est dans les FAQ ou pas, mais tant que j'y pense, je la donne tout de même :

    [Q] Comment savoir si un module est disponible dans le Core de perl ?

    [A] en appelant corelist :

    $ corelist POSIX

    POSIX was first released with perl 5
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say
      0  0

  6. #26
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    C:\>corelist POSIX
    'corelist' n'est pas reconnu en tant que commande interne
    ou externe, un programme exécutable ou un fichier de commandes.
    Il faut que le module Module::CoreList soit installé pour pouvoir l'utiliser.

    Or ce module est dans le core à partir de la version 5.8.9 de Perl et pas avant.
      0  0

  7. #27
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
      0  0

  8. #28
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Mmmm, étrange :
    $ corelist Module::CoreList

    Module::CoreList was first released with perl 5.009002
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say
      0  0

  9. #29
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    A titre indicatif, Djibril (et on peut sans doute l'ajouter à une FAQ), il existe deux nouveaux opérateurs depuis perl 5.10 : // et //=
    $a // $b est similaire à defined($a) ? $a : $b
    $a //= $b est similaire à $a = defined($a) ? $a : $b

    C'est bien pratique pour initialiser les variables "undef" avec une valeur, tout en considérant qu'un valeur fausse peut être une valeur initiale correcte.

    Exemple :
    avant la 5.10, si l'on utilisait la construction $a ||= "valeur par défaut", on pouvait initialiser à la valeur par défaut si $a était défini et nul (ou vide pour une chaine).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    use Getopt::Long;
    GetOptions("a=i" => \$a);
    $a ||= 10; # on initialise à 10 même si l'utilisateur a fourni l'option "-a 0"
    Maintenant, on peut écrire en version 5.10
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    use Getopt::Long;
    GetOptions("a=i" => \$a);
    $a //= 10; # on initialise à 10 seulement si l'utilisateur n'a pas fourni l'option "-a"
    Edit : peut-être dans cette rubrique ? http://perl.developpez.com/faq/perl/?page=sectionB2
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say
      0  0

  10. #30
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Salut à tous,

    Afin de faire une petite mise à jour de la FAQ Perl, tout forumeur débutant ou non est bienvenu pour nous donner un coup de main.

    Le but est de relire la FAQ Perl, afin de corriger les fautes d'orthographe, les phrases, les bugs dans les codes s'il y en a, de rajouter des questions si besoin.
    Vous n'êtes pas obligé de tout lire, juste ce qui vous intéresse. Si vous avez envi d'une modification, faites le nous savoir dans ce même topic en mentionnant le lien de la question ou l'intitulé de la nouvelle.

    Une section de perl 5.8 à 5.10 va aussi être créée. Donc toute contribution est la bienvenue pour y mettre des nouvelles questions en rapport avec les nouveautés de Perl 5.10. Vous pouvez vous baser sur la belle documentation d’un mongeur français (Sébastien Aperghis-Tramoni).

    Merci à tous
      0  0

  11. #31
    Membre actif

    Profil pro
    Inscrit en
    Août 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 156
    Points : 211
    Points
    211
    Par défaut
    On a des questions récurrentes sur le forum de "Est-ce qu'on peut faire ça en Perl", et c'est vrai que quand on débute, on n'a pas forcément la visibilité sur cpan.org.

    Dans la FAQ, dans cette section:
    http://perl.developpez.com/faq/perl/?page=sectionC38

    Il faudrait peut-être ajouter -ou alonger l'existant- pour qu'il soit bien clair que sur cpan on trouve absolument tout sur tout ou presque, et que ce sont des outils (globalement) propres et officiels, à utiliser sans crainte.

    Exemple:
    "Comment chercher si un module existe pour ce que je veux faire ?
    Pour toutes les problématiques du genre:
    Comment faire un truc en Perl ?
    Personne n'a une toolbox pour faire ça ?
    => Cpan a peut-être la solution.
    Peut-on envoyer des mails via snmp en Perl ?
    Comment parser facilement un XML en Perl ?
    Puis-je gérer les cookies dans Firefox en Perl ?
    Comment créer un arbre en Perl ?

    L'url http://search.cpan.org permet de faire une recherche parmis tous les modules cpan. On y trouve de véritables boites à outils pour tous les domaines informatiques professionnels comme pour le loisir."

    Dans les modules utiles, je mettrais aussi:
    Data::Dumper Permet d'afficher n'importe quelle variable, très utile pour debugger un programme
    Log::Log4perl Gestion des logs ultra-simple et pratique. A utiliser dès que vos daemon atteignent une certaine complexité.

    Ces points sont bien sûr laissés à la libre appréciation des autres membres plus expérimentés de ce forum et à de meilleurs rédacteurs que moi.
    Renvoyer les gens vers cpan n'est pas très long.
      0  0

  12. #32
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    , bonnes remarques,

    Dès que j'ai un peu de temps, je mettrais à jours la FAQ Perl.
      0  0

  13. #33
    Membre confirmé
    Avatar de Schmorgluck
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2006
    Messages : 371
    Points : 558
    Points
    558
    Par défaut
    Ce serait peut-être une bonne idée d'intégrer à la FAQ les conseils de Jedai dans son post Débutants ou expérimentés : Comment écrire du bon code en Perl.

    Ma suggestion serait de l'ajouter à la fin de la section S'initier à Perl.

    Qu'en pensez vous ?
    There's nothing like $HOME!
      0  0

  14. #34
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Pourquoi pas. Ce n'est pas une mauvaise idée, je mettrais à jour la FAQ quand j'aurais un peu de temps.
      0  0

  15. #35
    Membre éclairé
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Points : 773
    Points
    773
    Par défaut
    Super FAQ, claire, lisible, complète, merci et bravo !

    3 petits commentaires :

    1) Une petite coquille ici: diament s'écrit diamant

    2) Une remarque de noob pour le switch :
    J'expérimente cette version sous debian lenny
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    perl -v
    This is perl, v5.10.0 built for i486-linux-gnu-thread-multi
    et a priori le switch fonctionne sans utiliser perl 6 comme spécifié dans la FAQ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    use Switch;
    # ..
    switch ($$type[$i]) {
       case 1 { print 'foo' }
       case 2 { print 'bar' }
    	#...
       else { print 'bidule' }
    }
    Nota: je n'ai pas trouvé non plus ce point (sur les switch) dans la super belle doc de Sébastien Aperghis-Tramoni

    Ma suggestion:
    Peut-être completer ou mettre à jour ce point conformément à ce post.

    3) CGI ERROR 500
    Apparemment le truc classique pour les CGI.
    Comme j'ai mis un temps certain avant de trouver le pourquoi de cette erreur, j'en fais part:

    Si on "détourne" un peu l'utilisation d'un CGI et qu'on ne code pas de sortie, ou tout simplement que l'on code par étape et quel'on n'a pas encore codé de sortie, l'execution mène à une erreur 500, et le log fait apparaitre un "Premature end of script headers", peu évocateur pour le noob que je suis.

    C'est un peu déroutant et pourtant pas bien grave.

    Donc ma suggestion:
    ajouter dans les exemples d'erreur que le codage d'une sortie est nécessaire pour ne pas obtenir une belle erreur 500.
      0  0

  16. #36
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Merci pour tes remarques. La FAQ a été mise à jours.

    Merci.
      0  0

  17. #37
    Membre éclairé
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Points : 773
    Points
    773
    Par défaut array_diff
    Toujours en pleine découverte de Perl et plus habitué à JS et PHP, je cherchais à comparer des tableaux (array ou liste), de type array_diff et array_intersect.

    J'ai trouvé des modules tout prêts mais bon, pour la portabilité, j'ai preféré chercher une solution "simple" (merci O'Reilly).

    Si ça peut être utile dans la FAQ (Sommaire > S'initier à Perl > Listes), quitte à supprimer le Data:: Dumper:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    #!/usr/bin/perl -w
    use strict;
    use warnings;
    use Data::Dumper;
     
    sub array_diff {
    	# arrays @a and @b to be compared
    	my (@a, @b) = @_;
     
    	my @isect;
    	my @union;
    	my @diff;
    	my $e;
    	my %count;
    	my %hash_of_arrays;
     
    	# check entries
    	if ( (ref (\@a) ne "ARRAY") || (ref (\@b) ne "ARRAY") ) {
    		print "entries shall be ARRAY";
    		exit 0;
    	}
     
    	# store all keys into an hash $count
    	foreach $e (@a, @b) { $count{$e}++ }
     
    	# browse the hash $count
    	foreach $e (keys %count) {
    		# union is simple
    		push(@union, $e);
     
    		# intersection
    		if ($count{$e} == 2) {
    			push @isect, $e;
    		# difference
    		} else {
    			push @diff, $e;
    		}
    	}
     
    	# store resulting arrays into an hash of arrays
    	$hash_of_arrays{diff} = \@diff;
    	$hash_of_arrays{union} = \@union;
    	$hash_of_arrays{isect} = \@isect;
     
    	return %hash_of_arrays ;
    }
     
    # Testing the function
    my @arr1 = ( "foo", "bar", "truc", "bidule", 1 , 2, 3);
    my @arr2 = ( "foo", "car", "truc", "bidule", 1 , 2, 4);
    my %result;
     
    # global hash result
    %result = &array_diff(@arr1, @arr2);
    print Dumper(\%result);
     
    # diff only
    my $diff = $result{diff};
    print Dumper($diff);
     
    # Diff Output:	'3', 'car',  'bar', '4'
    # Union Output :	'truc', '3', 'car',   '2',  'bar',   '1',  '4',  'foo', 'bidule'
    # Intersection Ouput :	'truc', '2',  '1',  'foo', 'bidule'
    Et un autre petit truc sur les hashes quand on ne connait pas les clés existantes de manière déterministe et qu'on veut en ajouter une :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my %hash;
    $hash{nouvelle_cle} .= "nouvelle_valeur";
      0  0

  18. #38
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Dans la rubrique Perl, il existe une page source où l'on met des programmes tout fait pour dépanner tout le monde. Pour y participer, il faut donner son code ici.

    Pour comparer des tableaux, il faut utiliser le module List::Compare. Il est fait pour cela et s'installe sur toutes les plateformes. De plus, il est plus complet.

    Je pourrais d'ailleurs rajouter une question dans les sources pour comparer des tableaux. La FAQ nécessite d'un peu de ménage, du moins, d'aération surtout dans la section liste . Il faudrait que je trouve du temps pour m'y mettre.

    si tu veux, je rajoute ton code dans nos sources ??


    sinon pour ton hash, on écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $hash{nouvelle_cle} = "nouvelle_valeur";
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $hash{nouvelle_cle} .= "nouvelle_valeur";
    car à l'origine, $hash{nouvelle_cle} n'existe pas.
      0  0

  19. #39
    Membre éclairé
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Points : 773
    Points
    773
    Par défaut
    J'ai bien vu les modules existants, merci.

    Oui si tu veux ajouter ce petit script dans les sources, pas de probleme, en fait je n'avais pas trouvé l'endroit pour Perl (je cherchais un thread dans la FAQ comme c'est le cas pour les bash Linux).

    hashes:
    En fait, j'avais bien compris comment ajouter une valeur dans un hash.
    La concaténation dans ce cas s'appelle "Autovivification", comme précisé sur ce site. Je me suis mal expliqué, mais jettes un oeil au chapitre "autovivification", tu verras mieux l'intéret de cette notation.

    Et merci encore pour la bonne maintenance de la section Perl. C'est vraiment bien fait, à jour et complet !
      0  0

  20. #40
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    L'autovivification est un mécanisme à effet de bord, qui comme tout effet de bord, n'a pas que des avantages (notamment pour la création des structures à plus d'un niveau).

    Du coup, je ne conseille pas son utilisation intentionnelle (il y a déjà assez à faire avec son utilisation non intentionnelle, source de bug).

    Par ailleurs, écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $hash{nouvelle_cle} .= "nouvelle_valeur";
    ne fait pas qu'auto-vivifier la nouvelle clé. L'instruction ajoute le texte "nouvelle_valeur" à la valeur existante si la clé existait déjà. Ca ne remplace pas la valeur si elle existe déjà.

    Méfiance également, certaines fonctions utilisées sur des éléments de hash n'autovivifient pas (et heureusement), comme la fonction exists et sans doute tous les opérateurs de comparaison. Pour aller plus loin sur l'auto-vivification, un article des mongueurs : http://articles.mongueurs.net/magazi...ag43.html#h1.4

    PS : pour écrire une valeur dans une clé si est seulement si la clé n'existe pas, il est préférable d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $hash{nouvelle_cle} = "nouvelle_valeur" if !exists $hash{nouvelle_cle};
    Mais on peut aussi se contenter de vérifier que la valeur n'est pas définie (que la clé existe ou non) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $hash{nouvelle_cle} //= "nouvelle_valeue";
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say
      0  0

Discussions similaires

  1. Participez aux FAQ des rubriques Java, Eclipse et NetBeans !
    Par Mickael Baron dans le forum Contribuez
    Réponses: 0
    Dernier message: 22/01/2007, 20h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo