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 :

questions de première utilisation


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut questions de première utilisation
    Salut,


    J’ai téléchargé-installé Active Perl 5.12.2 Build 1202.

    Pourquoi obtiens-je un affichage avec le code suivant ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!C:\\Perl\\bin\\perl
    use strict;
    use warnings;
     
    $a = 'Hello world.';		
    $b = 'whadoyoudo ?' ;
    print "$a\n$b\n";
    select(undef, undef, undef, 10);
    mais pas avec le code suivant ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!C:\\Perl\\bin\\perl
    use strict;
    use warnings;
     
    $a = 'Hello world.';		
    $b = 'whadoyoudo ?' ;
    $c = "carac1=tatata carac2=tototo carac3=tititi carac4=tututu";
    print "$a\n$b\n";
    select(undef, undef, undef, 10);

    Dans le premier cas, il apparait une fenêtre à fond noir et bandeau bleu en haut, qui persiste les 10 secondes qui sont spécifiées dans l’instruction select()

    Dans le second cas, cette fenêtre apparait un dixième de seconde et disparait.
    J’interprète ce comportement comme la conséquence d’une erreur dans le code parce que si je crée volontairement une erreur dans le premier code qui marche, par exemple en écrivant
    $a = 'Hello world.";
    j’obtiens la même fugacité de cette fenêtre noire.







    Autre question.

    J’ai écrit le fichier sous Notepad++ et l’ai enregistré dans C:\Perl sous le nom perl1.pl

    Pour le tester, je fais ainsi:
    - modification du script sous Notepad++
    - je clique sur Fichier / Enregistrer
    - j’appelle ensuite Démarrer/ Exécuter avec l’instruction C:\\Perl\\\perl1.pl
    - il faut encore appuyer sur OK


    Est-ce qu’il y a moyen d’éviter ces allées et venues entre le fichier sous Notepad++ et le lancement par ligne de commande ? Car ce n’est pas pratique.



    Merci

  2. #2
    Membre chevronné
    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
    Par défaut
    Aucun de tes deux scripts n'est censé marcher, vu que tu as oublié de mettre l'instruction my devant tes déclarations de variables.

  3. #3
    Mr6
    Mr6 est déconnecté
    Membre émérite

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 608
    Par défaut
    Salut !

    Sous windows il te faut toujours une ligne de commande sous le coude, ouverte sur ton dossier perl (afin de lancer l'exécution de ton script et d'en voir le résultat)
    Sinon tu utilises un IDE incluant l'exécution des scripts. (je viens d'apercevoir Perl Express mais je ne sais pas ce qu'il vaut)

    @+
    Mr6

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 167
    Par défaut
    bonjour,
    Est-ce que ça a un rapport avec le $a et le $b des subroutines de tri ?

    Citation Envoyé par Schmorgluck Voir le message
    Aucun de tes deux scripts n'est censé marcher, vu que tu as oublié de mettre l'instruction my devant tes déclarations de variables.

  5. #5
    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 : 59
    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
    Par défaut
    Cela semble bien être le cas... Comme quoi use strict n'est pas encore assez strict

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 167
    Par défaut
    Chez moi, aucun des deux scripts ne fonctionne tant que je ne rajoute pas les "my" pour déclarer les variables, j'obtiens :

    Global symbol "$a" requires explicit package name at selectTest.pl line 6.
    Global symbol "$b" requires explicit package name at selectTest.pl line 7.
    Global symbol "$c" requires explicit package name at selectTest.pl line 8.
    Global symbol "$a" requires explicit package name at selectTest.pl line 9.
    Global symbol "$b" requires explicit package name at selectTest.pl line 9.
    Execution of selectTest.pl aborted due to compilation errors.



    Citation Envoyé par Philou67430 Voir le message
    Cela semble bien être le cas... Comme quoi use strict n'est pas encore assez strict

  7. #7
    Mr6
    Mr6 est déconnecté
    Membre émérite

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 608
    Par défaut
    Et pourtant il tourne.... enfin chez moi ca passe (activePerl 5.8.8 build 822)
    Du moins il est content s'il n'y a que $a et $b. Dès que je rajoute $c il braille mais que sur $c, ce qui confirme la suggestion de philou !

    @+
    Mr6

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Salut,


    Merci pour vos réponses et vos commentaires ci-dessus.


    J’avais fini par trouver qu’il faut déclarer les variables avec my, étant donné que j’ai mis la ligne use strict;
    Sur un autre forum, quelqu’un m’a en effet indiqué qu’il me fallait exécuter le programme dans une fenêtre DOS, comme le suggère Mr6, et non pas en utilisant seulement Démarrer/Exécuter pour spécifier le fichier à exécuter.
    J’ai donc pu voir le message d’erreur
    Global symbol "$c" requires explicit package name
    et comprendre qu’il y avait une histoire d’espace de noms et qu’il me fallait déclarer $c comme variable locale avec my.



    Par contre, je ne comprenais toujours pas pourquoi $a et $b échappaient aux foudres du contrôle à la compilation.
    Merci à Mr6 d’apporter ceci:
    Citation Envoyé par Mr6 Voir le message
    http://perl.enstimac.fr/DocFr/perlvar.html
    $a
    $b
    Variables spéciales de paquetage quand sort() est utilisé, voyez sort dans la page de manuel perlfunc. À cause de cette particularité $a et $b n'ont pas besoin d'être déclaré (en utilisant use vars, ou our()) même si vous utilisez le pragma vars strict. N'en faites pas des variables lexicales avec my $a ou my $b si vous voulez les utiliser dans un bloc ou une fonction de comparaison de sort().
    Et pis c'est tout, c'est juste un fonctionnement normal de perl.
    Ça ne peut pas se deviner ! Surtout par un noob en Perl. Il faut le savoir qu’il faut aller lire perlvar !
    Les développeurs de Perl n’y pensent pas ? Que $a et $b soient des noms de variables qui risquent fort d’être utilisées, c’est complétement évident, non ? Un avertissement devrait se trouver en bonne place dans la doc officille et dans tout tutoriel destiné aux débutants, ce qui n’est pas le cas de ceux que j’ai consultés dans la partie Tutoriels de notre site adoré.
    Citation Envoyé par Philou67430 Voir le message
    Cela semble bien être le cas... Comme quoi use strict n'est pas encore assez strict
    On ne peut donc être sûr de rien en Perl.....
    Ce n’est pas un bon point, ce coup là.





    Quant au reste de mes questions, j’ai trouvé le bouton “Enregistrer“ dans Notepad++ (il est temps..) qui m’évite de faire Fichier/Enregistrer,

    et, une fois ouverte, la fenêtre DOS ne se ferme plus, ( il faut quand même changer le répertoire courant au départ avec cd c:\perl )

    mais les allées et venues restent pénibles.
    Donc je vais devoir trouver un IDE pour Perl.

  9. #9
    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 : 59
    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
    Par défaut
    Citation Envoyé par eyquem Voir le message
    On ne peut donc être sûr de rien en Perl.....
    Pas tout à fait :
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ perl -e 'use strict;use warnings;$a = 1;$b=2;my $c=3;print map "sorted=$_\n", sort { $a <=> $b } $a, $b, $c;print "a=$a\n"'
    $a n'est pas modifiée après le tri, ce qui fait qu'il n'y a pas d'effet de bord sur $a pendant le tri.
    En revanche en déclarant $a en my, perl aurait indiqué une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ perl -e 'use strict;use warnings;my $a = 1;$b=2;my $c=3;print map "sorted=$_\n", sort { $a <=> $b } $a, $b, $c;print "a=$a\n"'
    Can't use "my $a" in sort comparison at -e line 1.
    Ce qui, en première approche, me convient parfaitement : le comportement n'est pas fondamentalement perturbé par mon erreur, perl est tolérant. Plutôt un bon point

  10. #10
    Mr6
    Mr6 est déconnecté
    Membre émérite

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 608
    Par défaut
    Citation Envoyé par eyquem Voir le message
    Ça ne peut pas se deviner ! Surtout par un noob en Perl. Il faut le savoir qu’il faut aller lire perlvar !
    Les développeurs de Perl n’y pensent pas ? Que $a et $b soient des noms de variables qui risquent fort d’être utilisées, c’est complétement évident, non ? Un avertissement devrait se trouver en bonne place dans la doc officille et dans tout tutoriel destiné aux débutants, ce qui n’est pas le cas de ceux que j’ai consultés dans la partie Tutoriels de notre site adoré.
    C'est clair, ca ne peut pas se deviner. Moi j'appelle ca le manque de chance. Quoi de plus normal que de vouloir juste faire un script de 3 lignes pour voir comment ca marche sans avoir à se taper toute la doc ? C'est vrai que ca fait violent comme télescopage avec les règles de programmation


    Citation Envoyé par eyquem Voir le message
    et, une fois ouverte, la fenêtre DOS ne se ferme plus, ( il faut quand même changer le répertoire courant au départ avec cd c:\perl )
    mais les allées et venues restent pénibles.
    Donc je vais devoir trouver un IDE pour Perl.
    Au lieu de changer de dossier, je te conseille de modifier ton path dans tes variables système afin d'y rajouter perl, comme ca plus de problème, tu pourra travailler directement dans le répertoire qui te plait (en général celui ou on stocke ses scripts ).
    Sinon la fenêtre DOS qui ne se ferme pas il faut le voir comme un avantage pour mettre au point un script :
    tu enregistres ton script, Alt-Tab pour aller sur la fenêtre et tu joues du rappel de commande pour relancer l'exécution, pas besoin de tout retaper à chaque fois. (des fois mon écran ressemble à un stroboscope vu le nombre de Alt-Tab à la minute )

    @+
    Mr6
    PS : j'allais oublier : ce site est ton ami (faudra que je reprenne un peu de temps pour continuer à contribuer d'ailleurs un jour...)

  11. #11
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 167
    Par défaut
    Bonjour,
    Au lieu d'utiliser NotePad, tu peux essayer PSPad
    http://www.pspad.com/en/
    ça marche bien sous XP, sous vista ou 7 je ne sais pas.
    Au début on est un peu perdu, mais ça vaut le coup d'essayer.
    Nibroc

    Citation Envoyé par eyquem Voir le message

    .........
    Autre question.

    J’ai écrit le fichier sous Notepad++ et l’ai enregistré dans C:\Perl sous le nom perl1.pl

    Pour le tester, je fais ainsi:
    - modification du script sous Notepad++
    - je clique sur Fichier / Enregistrer
    - j’appelle ensuite Démarrer/ Exécuter avec l’instruction C:\\Perl\\\perl1.pl
    - il faut encore appuyer sur OK


    Est-ce qu’il y a moyen d’éviter ces allées et venues entre le fichier sous Notepad++ et le lancement par ligne de commande ? Car ce n’est pas pratique.


    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question sur l'utilisation de wget
    Par berry dans le forum Réseau
    Réponses: 7
    Dernier message: 24/05/2007, 22h46
  2. [FLASH 8] Première utilisation de composant
    Par Destiny dans le forum Flash
    Réponses: 3
    Dernier message: 24/03/2006, 12h35
  3. [Framework] Questions sur l'utilisation de spring
    Par mlequim dans le forum Spring
    Réponses: 10
    Dernier message: 01/02/2006, 15h27
  4. Première utilisation
    Par SamDaKap dans le forum C++Builder
    Réponses: 6
    Dernier message: 20/11/2002, 14h22

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