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 :

utiliser un handle de fichier placé dans un tableau


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Par défaut utiliser un handle de fichier placé dans un tableau
    Bonjour,

    Je n'ai que peu d'expérience de perl, et je sis tombé sur un problème que j'arrive à contourner, mais pas à expliquer.
    Je veux ouvrir plusieurs fichiers et mettre leurs handle dans un tableau, puis pouvoir appeler un print avec un des handle stocké dans le tableau (je précise ce n'est pas dans un boucle foreach)

    Voici mon problème dans un exemple simplifié :
    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
    use strict;
    use warnings;
    use Symbol;
    # programme perl
    # Problème de syntaxe du print dans un fichier avec un handle de fichier dans un tableau
    # Note c'est dans un tableau parce que dans la vie réelle il y a besoin de plusieurs handle
    # Mais on n'en met qu'un pour simplifier
        my $f = "toto.txt";
     
        my @fhs; # tableau de handle's
        open(my $fh, '>', $f) or die "Cannot open $f: $!";
        push @fhs, $fh; # place le handdle dans le tableau 
    #    print $fhs[0] . "\n"; # on peut vérifier qu'il y a bien une valeur
        # Les 2 lignes ci-dessous marchent (on peut vérifier que le fichier toto.txt contient bien le texte
        my $fh2 = $fhs[0];
        print ($fh2 "bonjour les amis fh2 ");
        # La ligne ci-dessous ne marche pas  (indique : "Not a CODE reference at test01.pl line 18.")
    #    print ($fhs[0] "bonjour les amis KO ");
        # La ligne ci-dessous marche aussi alors qu'on appelle "de la même façon" que pour le print
        close $fhs[0];
        print ($fh2 "tentative de print apres le close provoque bien une erreur");
     #   print "fini : qui peut m'expliquer ?";

  2. #2
    Membre actif
    Avatar de Grumphette
    Homme Profil pro
    Validation manager
    Inscrit en
    Juillet 2008
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Validation manager

    Informations forums :
    Inscription : Juillet 2008
    Messages : 81
    Par défaut
    j'avoue ne pas comprendre le départ, mais pour ce qui est de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     close $fhs[0];
        print ($fh2 "tentative de print apres le close provoque bien une erreur");
    tu as copié 2 fois le même descripteur de fichier, et le fait d'en fermer les fermes tous, c'est un peu comme si en C tu copiais 2 pointeur vers un tableau, et tu fais un free sur l'un des pointeurs, l'autre pointe dans le vide, d'où l'erreur.

    Grumphette

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/05/2012, 13h29
  2. Chercher une valeur dans un fichier placé dans un dossier
    Par nilsmatlab dans le forum Interfaces Graphiques
    Réponses: 9
    Dernier message: 09/06/2011, 08h40
  3. Réponses: 12
    Dernier message: 12/06/2009, 16h55
  4. Réponses: 2
    Dernier message: 10/08/2008, 19h02
  5. Réponses: 2
    Dernier message: 14/05/2007, 10h22

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