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

Programmation et administration système Perl Discussion :

Fonction eval et crochet


Sujet :

Programmation et administration système Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Par défaut Fonction eval et crochet
    Bonjour,

    Pourrait on m'expliquer les lignes qui contiennent les fonctions eval et les ligne avec les $ crochets, $ virgule et $ antislah :
    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
    eval 'exec perl -S $0 "$@"'
        if $running_under_some_shell;
    # this emulates #! processing on NIH machines.
    # (remove #! line above if indigestible)
     
    eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_0-9]+=)(.*)/ && shift;
     
    # process any FOO=bar switches
     
    $[ = 1;			# set array base to 1
    $, = ' ';		# set output field separator
    $\ = "\n";		# set output record separator
     
    $FALSE = 0;
    $TRUE = 1;

    D'avance merci .....

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Par défaut
    J'ai un petit peut avancer ...

    En effet, j'essaie de faire un test sur $ARGV[0], j'ai donc modifié les lignes comme suit :
    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
    eval 'exec perl -S $0 "$@"'
        if $running_under_some_shell;
    # this emulates #! processing on NIH machines.
    # (remove #! line above if indigestible)
     if ($ARGV[0] eq "") {
            print " syntaxe : perl numerote.pl nom_de_fichier \n" ;
            exit(-1) ;
       } 
    eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_0-9]+=)(.*)/ && shift;
     
    # process any FOO=bar switches
     
    $[ = 1;			# set array base to 1
    $, = ' ';		# set output field separator
    $\ = "\n";		# set output record separator
     
    $FALSE = 0;
    $TRUE = 1;
    Si je lance mon script sans argument, j'ai l'erreur suivante :
    Use of assignment to $[ is deprecated at ./flexCount.pl line 44

  3. #3
    Membre chevronné Avatar de Beniou
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 357
    Par défaut
    Bonjour,

    Citation Envoyé par dubis
    Si je lance mon script sans argument, j'ai l'erreur suivante :
    Use of assignment to $[ is deprecated at ./flexCount.pl line 44
    Cette variable spéciale n'est plus utilisée dans les versions récentes de Perl. Cela met le premier indice d'un tableau à 1 et aussi dans les extraction de sous-chaînes.
    Comme dit dans le lien donné, ce n'est pas recommandé de l'utiliser.

    Si vraiment cela est indispensable, la solution donnée ici pourrait fonctionner, à savoir l'utilisation de local.

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Par défaut
    Merci Beniou,

    En fait le script sur lequel je travaille était réparti en 2 fichiers : un shell et un perl. J'essaie de n'avoir qu'une seule fichier perl.

    Pour revenir à mon problème, j'ai donc commenté les ligne suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     eval 'exec perl -S $0 "$@"'
         if $running_under_some_shell;
    eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_0-9]+=)(.*)/ && shift;
    Le fonctionnement du script n'a pas changé.

    Et pour ces dernières
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    # process any FOO=bar switches
    $[ = 1;			# set array base to 1
    $, = ' ';		# set output field separator
    $\ = "\n";		# set output record separator

    J'ai des message d'erreur du style : Use of uninitialized value $feat in substitution. Ces 3 lignes me sont donc indispensable même si je ne les maîtrise pas

    Mon soucis est que j'aimerais introduire le test de SYNTAXE sur ARGV[0] qui est toujours sans effet.
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ($ARGV[0] ne "") {
    	  $LIC_LOG_FILE=  $ARGV[0];
    	  }else {
    	print " syntaxe : flexCount.pl nom_de_fichier \n" ;
            exit 1 ;
       }
    Par contre le test sur ARGV[1] fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (defined($ARGV[1])) {
        print colored ['red on_black'], 'This script can not load one more file', "\n"; 
        exit 1 ;
    }

  5. #5
    Membre chevronné Avatar de Beniou
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 357
    Par défaut
    Bonjour,

    Si tu veux obliger ton script à avoir un et un seul argument tu peux faire directement le test sur la longueur du tableau @ARGV.

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(@ARGV != 1){
        die "syntaxe : flexCount.pl nom_de_fichier\n\n";
    }
     
    my ($file) = @ARGV;
     
    ...

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Par défaut
    Merci Beniou,

    J'ai donc modifié avec les lignes que tu m'as donné....

    Si je lance mon script hors de sa syntaxe c'est à dire simplement avec cette ligne de commande :
    J'ai l'erreur suivante :

    Use of assignment to $[ is deprecated at ./flexCount.pl line 52.

    Voici les lignes 52 à 54:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # process any FOO=bar switches don't erase or comment
    $[ = 1;			# set array base to 1
    $, = ' ';		# set output field separator
    $\ = "\n";		# set output record separator
    Je ne comprend pas ces variables car elle ne sont pas réutilisée dans la suite de mon script.
    Sont-elles des variables par défaut comme @ARGV ??

    Merci

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

Discussions similaires

  1. Fonction eval en java ?
    Par ramislebob dans le forum Langage
    Réponses: 2
    Dernier message: 12/01/2006, 00h22
  2. Parsage avec la fonction eval
    Par alain31tl dans le forum Langage
    Réponses: 12
    Dernier message: 23/11/2005, 15h27
  3. Simuler la fonction eval
    Par topwl dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 26/08/2005, 01h44
  4. Existe-t-il une fonction Eval() sous Delphi ?
    Par Hell dans le forum Langage
    Réponses: 5
    Dernier message: 20/12/2004, 17h45
  5. [String] équivalent de la fonction eval() en javascript
    Par jeyce dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 01/09/2004, 08h42

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