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 :

Problème de <stdin>


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par défaut Problème de <stdin>
    Bonjour,
    J’ai un script au début du quel, je demande que l ‘on saisisse une valeur. Cependant il arrive régulièrement qu’il (le script) n’attende pas la saisie et continue avec la valeur vide. Je souhaitais savoir si c’était un bug de perl (se dont je doute) ou erreur de ma parts. Je précise que je suis sous debian avec la version 5.8.8 de perl et que quand je rentre la valeur directement dans le script cela marche sans problème (genre $x=112) ;
    Si joint le script que j’exécute :
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    #!/usr/local/bin/perl5.8.8 -w
    # -w affichage des warnings
    use Carp;		#recherche des erreur de syntaxes
    use strict;		#verifie si tt les variables sont bine déclaré
    use threads;		#utilation des threads (nouvel version)
    use Config;		#pr tester la config de perl 
     
    my $x = undef;
    print "\n saisir le code erreur \n";
     
    chomp($x =<STDIN>); 
     
    my @fichier = &lister_fichier();
     
    my $total =(scalar(@fichier));
    my $moitier = int($total/2);
     
    my @f1=@fichier[0..$moitier];
    my @f2=@fichier[$moitier+1..$total-1];
     
    my $ref_f1=\@f1;
    my $ref_f2=\@f2;
     
     
    if ($Config{useithreads}) {
    	print " dans thread \n";
    	my ($threads1)=threads->new(\&recherche,$ref_f1,$x);
    	my ($threads2)=threads->new(\&recherche,$ref_f2,$x);
    	$threads1->join;
    	$threads2->join;
    }else{
    	print " pas de threads \n";
    	&recherche($ref_f1,$x);
    	&recherche($ref_f2,$x);
    }
     
     
     
     
    sub lister_fichier(){
    my $repertoire = "/home/baptiste/Desktop/test/";
     
    my @fichiers = ();
     
    opendir (my $rep_fh, $repertoire) or die "impossible d ouvrir \n";
    my @file_rep = grep { !/^\.\.?$/ } readdir($rep_fh); 
    closedir ($rep_fh);
     
    foreach my $nom (@file_rep) {
    	if (-f "$repertoire/$nom") { 
    		push(@fichier,"$nom");
    	}
    }
    return @fichier;
    }
     
    sub recherche (){
    	my ($ref_f1,$x) = @_;
    	my @tab=@{$ref_f1};
     	print "\$x : $x \n";	
    	foreach my $fich (@tab){
     
    		open FICHIER , "< /home/baptiste/Desktop/test/$fich";
    		while (my $ligne = <FICHIER>){
    			(my $num , my $nb) = split(/:/,$ligne);
    			if ($num == $x){
    			print ("nom du pc : $fich , nb occurence : $nb \n");
    			}
    		}	
    	}
    }
    Le message que j’ai régulièrement :
    Saisir le code :

    Dans threads

    $x :
    Argument "" isn’t numeric in numeric equation == at ./essaie.pl ligne 66 , <FICHIER> ligne 1
    $x :
    Argument "" isn’t numeric in numeric equation == at ./essaie.pl ligne 66 , <FICHIER> ligne 1
    cordialement Krousty.

  2. #2
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    met le code suivant après tes use

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par défaut
    Citation Envoyé par djibril Voir le message
    met le code suivant après tes use
    Ca ne change rien , j'ai toujours le même problème . Cette ligne et senser faire quoi vider la memoire tampon?
    Je tiens a rajouter que le script mache tjours la première fois et c 'est seulement ensuite qu il ne fonctionne plus que de maniere aléatoire jusqu'à ce que je reboot ou ferme et réouvre la session.

    Cordialement Krousty.

  4. #4
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Argument "" isn’t numeric in numeric equation == at ./essaie.pl ligne 66 , <FICHIER> ligne 1
    => tu ne dois pas comparer des nombres entres eux.
    Pour entre etre sur, fais un print avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    print "=> comparaison de '$num' et '$x'\n";
    			if ($num == $x){
    			print ("nom du pc : $fich , nb occurence : $nb \n");
    			}
    sinon j'ecrirais aussi ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    print "\n saisir le code erreur \n";
    my $x =<STDIN>;
    chomp($x);

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 89
    Par défaut
    justement la est le probleme , il arrive que je ne puisse pas saisir de valeur , donc il essaye de comparer $num à "rien" (rectifiez moi si je me trompe mais il me semble que apres une initialisation du genre my $x; $x est "undef")
    En faite , il "saute" la ligne $x=<STDIN>.
    Je vais tester se script sur une autre machine , au cas ou j'aurais fais une mauvaise installation de perl5.8.8.

  6. #6
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    même avec $| ++ (qui sert à vider la mémoire tampon) ??
    Faites aussi au lieu du -w dans le shebang

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

Discussions similaires

  1. Problème script perl avec STDIN
    Par deimosfr dans le forum Langage
    Réponses: 2
    Dernier message: 23/07/2009, 10h22
  2. Problème print et <STDIN>
    Par cricri77200 dans le forum Langage
    Réponses: 2
    Dernier message: 21/04/2009, 16h41
  3. Problème avec stdin dans fgets
    Par gaetan24430 dans le forum Débuter
    Réponses: 10
    Dernier message: 23/01/2009, 17h03
  4. Problème <STDIN>, Scite?!
    Par miboo dans le forum Langage
    Réponses: 9
    Dernier message: 31/12/2007, 15h26
  5. problème stdin cmd.exe
    Par youp_db dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 11/10/2006, 09h28

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