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 :

conseil pour un script perl


Sujet :

Langage Perl

  1. #61
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par cmcmc Voir le message
    C'est un point délicat et qui me semble-t-il demande beaucoup de tact quand on le généralise. Je crois avoir passé un seuil en Perl à partir du moment ou j'ai commencé à minimiser mon utilisation de variables nommées au profit de $_ et d'une lecture correcte des indexations et tranchages.
    Personnellement, j'ai commencé à utiliser $_ dès que j'ai appris le Perl il y a plus de 10 ans (le tuto avec lequel j'ai commencé le faisait, cela ne me posait pas de problème) et je continue à le faire très largement, je trouve cela très pratique. Mais je trouve aussi que les arguments de Philou sont loin de manquer de pertinence, et j'hésite assez souvent entre les deux solutions. Souvent, par exemple quand je lis un fichier, j'utilise souvent $_ dans un premier temps, parce qu'il me permet de réaliser facilement toute une série d'actions "techniques" (chomp, s///g, m//, lc, uc, length, split, etc.), puis je passe à une variable nommée quand je rentre dans la complexité fonctionnelle ou algorithmique. Je ne dis pas que ma solution est la bonne, mais juste que je suis plus à l'aise avec des variables nommées quand le fonctionnel ou l'algo deviennent compliqués. Même chose avec @_, $1, $2, etc., et un certain nombre d'autres variables de ponctuation, mais, franchement, quand je trouve du code utilisant des variables comme $(, $^p ou $^F, je suis obligé d'ouvrir la doc pour savoir ce qu'elles signifient. Dans ce cas, je préfère souvent leur donner un nom intelligible avant de les utiliser (ou éventuellement utiliser le module English).
    Citation Envoyé par cmcmc Voir le message
    ... Mais ce n'est pas facile de positionner correctement le curseur...
    Alors, là, je suis bien d'accord. C'est toute la difficulté.
    Citation Envoyé par cmcmc Voir le message
    ... je crois qu'il est possible d'écrire du code qui soit à la fois concis et intelligible.
    C'est aussi mon avis, mais nous ne plaçons peut-être pas le curseur au même endroit...
    Citation Envoyé par cmcmc Voir le message
    Le problème est que celui qui lit ce code doit, pour être en mesure d'intervenir utilement dessus, avoir un minimum de connaissances des capacités de Perl, et donc un minimum de formation. Il sait probablement écrire du C ou équivalent, et donc la formation qu'il doit recevoir doit porter à mon avis dès le départ sur ce qui fait la magie (et la difficulté) de Perl quand on le maîtrise (resp. quand on ne le maîtrise pas...). D'où mes efforts en ce sens, que tu semble considérer mal placés
    Non, non, pas mal placés, si tu as compris cela, je me suis sans doute mal exprimé. Il faut juste faire attention à qui on s'adresse. Sur un forum, par exemple, utiliser des concepts trop avancés face à un débutant risque de le faire fuir. Ou, dans ma boîte, quand j'utilise des concepts Perl relativement avancés, j'estime devoir au moins ne pas les compliquer avec des constructions syntaxiques plus ou moins mystérieuses ou magiques (même si elles peuvent être bien pratiques). Par exemple, si je décide de créer une fonction fabriquant dynamiquement d'autres fonctions parce que c'est vraiment utile pour mon programme, j'introduis un certain degré de complexité pour celui qui n'est pas habitué à ce genre de construction, je vais au moins essayer de simplifier l'environnement syntaxique pour éviter d'ajouter de la difficulté de compréhension. Mais là encore, toute la difficulté est de positionner le curseur.

  2. #62
    Membre confirmé
    Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 316
    Points : 641
    Points
    641
    Par défaut
    @Lolo78, @Philou67430,

    Nos derniers échanges dans cette discussion dérivant sur des problèmes de style, je me suis permis d'y répondre dans un nouveau fil afin de ne pas parasiter outre mesure celui-ci. Au plaisir de vous y voir
    Sauf indication contraire tous les codes que je présente sont utilisables et testés (mais sans garantie d'aucune sorte)
    J'apporte beaucoup de soin à la rédaction de mes posts et apprécie les retours donc merci de s'il vous paraissent pertinents ou utiles
    Lazyness, Impatience and Hubris are good for you

  3. #63
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 319
    Points : 144
    Points
    144
    Par défaut

    Bonjour @cmcmc,@lolo78 et Philou67430
    Je m'excuse de revenir vers vous 3 car là pour être franc suite à vos différents messages je suis complétement à la ramasse. Si quelqu'un pouvait m’éclaircir sur le sujet, j'en serais ravi ..;
    Si tu tapes ta tête contre une cruche et que ça sonne creux,n'en déduis pas que c'est la cruche qui est vide.

  4. #64
    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
    Concernant le style de programmation, je t'invite à suivre le lien vers la discussion créée par cmcmc.

    Si tu as en revanche des questions concernant ton problème initial, tu peux naturellement demander des précisions dans ce fil
    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

  5. #65
    Membre confirmé
    Avatar de cmcmc
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 316
    Points : 641
    Points
    641
    Par défaut
    @Justin LOÏC

    pas de panique on va reprendre là où on en était (désolé pour les perturbations)

    Je te demandais par exemple d'expliciter la ligne de code suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            print fic1_out +(join ';', map { @$_ } @h{@wanted}), "\n";
    Avec les explications fournies et par Lolo78, et par moi même, tu devrais pouvoir décoder @h{@wanted}. De quoi s'agit-il ?

    Ensuite, pourquoi a-t-on besoin du map { @$_ } ? Qu'est-ce qui se passe si on l'enlève ? Que signifie @$_ (indice: on aurait pu l'écrire également @{$_}) ?

    (incidemment, ce programme et les explications associées sont un peu plus avancés que ceux de l'autre discussion que nous avons en cours, aussi si tu préfères n'hésite pas à continuer sur l'autre et revenir plus tard sur celle ci)
    Sauf indication contraire tous les codes que je présente sont utilisables et testés (mais sans garantie d'aucune sorte)
    J'apporte beaucoup de soin à la rédaction de mes posts et apprécie les retours donc merci de s'il vous paraissent pertinents ou utiles
    Lazyness, Impatience and Hubris are good for you

  6. #66
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 319
    Points : 144
    Points
    144
    Par défaut
    Citation Envoyé par cmcmc Voir le message
    Je te demandais par exemple d'expliciter la ligne de code suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            print fic1_out +(join ';', map { @$_ } @h{@wanted}), "\n";
    Concernant @h cela correspond à un tableau constitué des éléments du hachage dont les clefs sont dans le tableau @wanted à la place de @wanted on aurait put mettre qw(CLASS SCHED SCHEDPOOL INCLUDE)
    Le + permet comme tu l'expliquais dans un précedent message, je te cite
    le '+' sert à éviter que la ligne ci-dessus ne soit interprétée comme représentant deux expression séparées par une ',' : un appel fonctionnel à print, et la constante "\n":
    Pour ce qui suis j'ai encore du mal
    Ensuite, pourquoi a-t-on besoin du map { @$_ } ? Qu'est-ce qui se passe si on l'enlève ? Que signifie @$_ (indice: on aurait pu l'écrire également @{$_}) ?

    (incidemment, ce programme et les explications associées sont un peu plus avancés que ceux de l'autre discussion que nous avons en cours, aussi si tu préfères n'hésite pas à continuer sur l'autre et revenir plus tard sur celle ci)
    Si tu tapes ta tête contre une cruche et que ça sonne creux,n'en déduis pas que c'est la cruche qui est vide.

  7. #67
    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
    Oui, @$_ s'écrit aussi @{$_} et signifie : dé-référencer $_ en tableau.
    On récupère donc une liste des éléments contenus dans chaque élément @g{wanted} (chaque élément devant être une référence vers un tableau).

    J'espère avoir été clair.
    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

  8. #68
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 319
    Points : 144
    Points
    144
    Par défaut
    Si je décompose le traitement, si je met en mode trace de @h{@wanted}
    j'ai ce type de resultat
    $VAR1 = [
    'SCH-01n-APPLI-R4'
    ];
    $VAR2 = [
    'VVP-TV03-R4'
    ];
    $VAR3 = [
    'CL-01n-APPLI'
    ];
    $VAR1 = [
    'SCH-01n-APPLI-R3'
    ];
    $VAR2 = [
    'VVP-TV03-R3'
    ];
    $VAR3 = [
    'CL-01n-APPLI'
    ];
    Par contre, si je met en mode trace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    map { @$_ } @h{@wanted}
    , j'obtiens cela
    $VAR1 = 'SCH-01n-APPLI-R4';
    $VAR2 = 'VVP-TV03-R4';
    $VAR3 = 'CL-01n-APPLI';
    $VAR1 = 'SCH-01n-APPLI-R3';
    $VAR2 = 'VVP-TV03-R3';
    $VAR3 = 'CL-01n-APPLI';
    le fichier de départ etant ceci
    CLASS CL-01n-APPLI *NULL* 0 701000 0 *NULL*
    NAMES
    INFO 0 0 0 0 *NULL* 0 0 2147483647 1 0 0 0 0 0 0 0 0 0 1108637276 61E138FC1DD211B2ACD700E000C490F5 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 3 16
    KEY 01N
    BCMD *NULL*
    RCMD *NULL*
    RES STUG-TV03-10.64 *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL*
    POOL VVP-TV03-R4 NetBackup NetBackup NetBackup NetBackup NetBackup NetBackup NetBackup NetBackup NetBackup
    FOE 0 0 0 0 0 0 0 0 0 0
    SHAREGROUP *ANY*
    DATACLASSIFICATION *NULL*
    CLIENT dr01nas2-s2 Linux RedHat2.4 0 0 0 0 *NULL*
    SCHED SCH-01n-APPLI-R4 2 3 604800 4 0 0 0 *NULL* 0 0 0 0 0 0 -1 0
    SCHEDWIN 0 604800 0 0 0 0 0 0 0 0 0 0 0 0
    SCHEDRES *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL*
    SCHEDPOOL *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL*
    SCHEDRL 4 1 1 1 1 1 1 1 1 1
    SCHEDFOE 0 0 0 0 0 0 0 0 0 0
    SCHEDSG *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL*
    SCHED SCH-01n-APPLI-R3 2 3 604800 3 0 0 0 *NULL* 0 0 0 0 0 0 -1 0
    SCHEDWIN 0 604800 0 0 0 0 0 0 0 0 0 0 0 0
    SCHEDRES *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL*
    SCHEDPOOL VVP-TV03-R3 *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL*
    SCHEDRL 3 1 1 1 1 1 1 1 1 1
    SCHEDFOE 0 0 0 0 0 0 0 0 0 0
    SCHEDSG *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL* *NULL*
    cela donnera à la fin ce resultat
    SCH-01n-APPLI-R4 VVP-TV03-R4 CL-01n-APPLI
    SCH-01n-APPLI-R3 VVP-TV03-R3 CL-01n-APPLI
    Le fait d'avoir voulu décomposé est-ce la bonne méthode pour appréhender ce type de syntaxe.
    Si tu tapes ta tête contre une cruche et que ça sonne creux,n'en déduis pas que c'est la cruche qui est vide.

  9. #69
    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 ne comprends pas ta question, et notamment à quoi se réfère "la décomposition" dont tu parles ?!

    Lorsque tu travailles directement avec @h{wanted} to dispose d'un tableau de tableau, c'est à dire que pour chaque élément de @h{wanted}, tu disposes d'une référence vers un tableau contenant un ou plusieurs scalaires (dans ton cas visiblement, il n'y a à chaque fois qu'un élément).
    En travaillant directement avec ce tableau, tu peux donc identifier à quel indice du tableau @h{wanted} chaque élément appartient (dans ton exemple, l'élément 'CL-01n-APPLI' se trouve à l'indice 2 du tableau @h{wanted}).

    Lorsque tu travailles avec map @$_, @h{wanted}, tu récupères un simple tableau, à plat, de tous les sous-tableaux. Bien sûr, dans ton cas de figure ou les sous-tableaux contiennent tous un seul élément, l'indice de 'CL-01n-APPLI' sera la même dans @h{wanted} que dans map @$_, @h{wanted}. Mais si l'on imaginait que (@h{wanted})[0] contienne 2 élements, son indice serait alors supérieur.

    @h{wanted} = (['SCH-01n-APPLI-R4'], ['VVP-TV03-R4'], ['CL-01n-APPLI'], ['SCH-01n-APPLI-R3'], ['VVP-TV03-R3'], ['CL-01n-APPLI']);
    alors que
    map @$_, @h{wanted} = ('SCH-01n-APPLI-R4', 'VVP-TV03-R4', 'CL-01n-APPLI', 'SCH-01n-APPLI-R3', 'VVP-TV03-R3', 'CL-01n-APPLI')

    Mais je ne suis pas sûr d'avoir répondu à ton interrogation.
    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

  10. #70
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 319
    Points : 144
    Points
    144
    Par défaut
    @philou67430. merci pour tes explications que je pense avoir compris.
    Sinon, quand je parle "décomposition" c'est décomposition de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print fic1_out +(join ';', map { @$_ } @h{@wanted}), "\n";
    pour arriver à mieux cerner ou appréhender ce quelle fait.
    C'est d'ailleurs pour cela que je demandais si c’était la bonne méthode.
    Si tu tapes ta tête contre une cruche et que ça sonne creux,n'en déduis pas que c'est la cruche qui est vide.

  11. #71
    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
    Cette "décomposition" (je parlerais plutôt d'un pipeline d'opérations) est correcte.
    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

+ Répondre à la discussion
Cette discussion est résolue.
Page 4 sur 4 PremièrePremière 1234

Discussions similaires

  1. Conseil pour un script de suppression de fichiers en double
    Par doc malkovich dans le forum Langage
    Réponses: 10
    Dernier message: 11/09/2013, 11h17
  2. Réponses: 1
    Dernier message: 29/05/2008, 14h16
  3. Besoin de quelques conseils pour un script java
    Par poussin544 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 02/03/2006, 10h41
  4. Réponses: 2
    Dernier message: 11/07/2002, 08h31
  5. [web] Cherche un conseil pour un livre perl-tk
    Par Anonymous dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 29/04/2002, 15h35

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