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 :

Use of uninitialized value in numeric lt (<)


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 6
    Par défaut Use of uninitialized value in numeric lt (<)
    Bonjour,

    Je viens vers vous car j'ai un petit soucis. J'ai un bou de code qui me génère un Warning :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    opendir my($dir), $path
        or die "Couldn't open $path : $!\n";
     
      my ($last_file_name)
        = reduce { -M "$dir/$a" < -M "$dir/$b" ? $a : $b }
            grep { /$type/ && not -d "$dir/$_" } (readdir $dir);
      closedir $dir;

    Mon problème se situe plus à ce niveau là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reduce { -M "$dir/$a" < -M "$dir/$b" ? $a : $b }
    le reduce vient apparement de la bibliothèque List::Util. Et d'après cette page, http://search.cpan.org/~gbarr/Scalar...b/List/Util.pm , la syntaxe est bonne.

    Lorsque j'execute mon script, j'ai ce warning qui s'affiche :

    Use of uninitialized value in numeric lt (<) at ./ciscobackup4.pl line 263, <FICHIER> line 1.
    Quelqu'un a t'il une ptite idée?

    Merci d'avance,

    Olivier

  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
    Ben, comme indiqué par Perl : une de tes variables n'est pas initialisée, soit $dir, soit $a, soit $b.
    Faute de voir où sont initialisées $a et $b, et n'utilisant les handles indirects que quand ils me sont utiles (c'est à dire quasiment jamais), je ne saurais être catégorique, mais j'ai de gros doutes sur la déclaration de $dir en plein milieu d'un expression open. Pour moi, $dir est le principal suspect.
    Tu n'as qu'à ajouter des print pour trouver quelle variable n'est pas initialisée.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 6
    Par défaut
    Merci pour ta réponse.

    Je viens d'essayer d'initialiser $a et $b. $dir est bien initialisé car lorsque je fais un print j'ai cette valeur : GLOB(0x9a10054)

    $a et $b ne peuvent pas être initialisé. Elles ne sont accessible que dans reduce.

    L'erreur

    Use of uninitialized value in numeric lt (<) at ./ciscobackup4.pl line 264, <FICHIER> line 1.

    persiste....

    Voici le code de la fonction complete :

    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
    sub Fichier_plus_recent {
     
      my $path = $_[0];
      my $type = $_[1];
      my $dir;
      use List::Util qw(reduce);
     
      opendir $dir, $path
        or die "Couldn't open $path : $!\n";
      print "DIR=$dir";
     
      my ($last_file_name)
        = reduce { -M "$dir/$a" < -M "$dir/$b" ? $a : $b }
            grep { /$type/ && not -d "$dir/$_" } (readdir $dir);
      closedir $dir;
      print "$last_file_name\n";
      return $last_file_name;
     
    }

    Avez-vous une idée?

    Merci d'avance,
    Olivier

  4. #4
    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
    Je devais être crevé quand j'ai répondu, parce que c'est encore plus simple que je ne l'imaginais : l'opérateur -M est un opérateur de test sur fichier, prenant comme argument une chaîne de caractère contenant le chemin du fichier à tester. Alors ce serait peut-être une bonne idée de lui fournir ça, c'est à dire $path au lieu de $dir.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 6
    Par défaut
    Effectivement, ça venait bien de là! Merci beaucoup!!

    Juste pour google, Cette fonction perl permet de lister un répertoire et de récupérer le nom du fichier le plus récent en fonction d'une partie de son nom.


    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
    sub Fichier_plus_recent {
     
      use List::Util qw(reduce);
     
      my $path = $_[0]; #Chemin du répertoire à lister
      my $type = $_[1]; #Partie du nom de fichier que l'on recherche
      my $dir;
     
     
      opendir $dir, $path
        or die "Couldn't open $path : $!\n";
      print "DIR=$dir";
     
      my ($last_file_name)
        = reduce { -M "$path/$a" < -M "$path/$b" ? $a : $b }
            grep { /$type/ && not -d "$path/$_" } (readdir $dir);
      closedir $dir;
     
     
      return $last_file_name; #Nom du fichier le plus récent
     
    }

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

Discussions similaires

  1. Use of uninitialized value in numeric ne (!=)
    Par Jane Home dans le forum Langage
    Réponses: 6
    Dernier message: 22/02/2010, 16h21
  2. Use of uninitialized value in pattern match (m//)
    Par Vladkergan dans le forum Langage
    Réponses: 4
    Dernier message: 13/01/2008, 19h25
  3. Use of uninitialized value in string ne at
    Par Gad29 dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 09/05/2007, 13h49
  4. [USE STRICT] uninitialized value in print ...
    Par pop_up dans le forum Langage
    Réponses: 4
    Dernier message: 24/04/2006, 14h18
  5. [langage] Use of uninitialized value
    Par Batou dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2005, 10h28

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