perte de FILEHANDLE dans un module
Bonjour
Je souhaite découper un fichier en deux dans un module auquel je fournis 1 FH d'entrée et 2 FH de sortie. (J'ai aussi essayé avec des scalaires.)
Problème :
Le module lit bien dans le fichier d'entrée (je l'affiche sans pb), mais n'écrit rien en sortie.
Après 2 jours de recherche je sais que je cafouille entre les FH et les scalaires, mais comment faire ?
Le module principal :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
#!/usr/bin/perl -w
use warnings;
use strict;
use Pac2Cob ;
print "extraction lignes de $nom : ";
open OLD_PGM, "<", "$nom_prog" or die "ouverture de $nom_prog impossible : $!";
open NEW_DATA, '>', "$nom.tmpD" or die "ouverture de $nom.tmpD impossible : $!";
open NEW_PROC, '>', "$nom.tmpP" or die "ouverture de $nom.tmpP impossible : $!";
&Pac2Cob::extraire_ligne (*OLD_PGM, *NEW_DATA, *NEW_PROC);
#&Pac2Cob::extraire_ligne ($old_pgm, $new_data, $new_proc);
close(OLD_PGM);
close(NEW_DATA);
close(NEW_PROC); |
Le module appelé :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
#!/usr/bin/perl -w
# migration du patrimoine Pacbase vers du cobol propre
use warnings;
use strict;
package Pac2Cob ;
sub extraire_ligne {
my ($prog , $newD , $newP) = @_;
# la premiere partie du fichier est stockee en .tmpD0 (D comme Data)
my $out = $newD ;
while(defined(my $lg = <$prog>)){
# la seconde partie du fichier commence en "PROCEDURE DIVISION"
# elle est stockee en .tmpP0 (P comme Proc)
$lg =~ /PROCEDURE\s+DIVISION/x and $out = $newP ;
# suppression des espaces de fin de ligne
$lg =~ s/\s*$// and print {$out} ("\n$lg") ;
}
print "$. lg\n";
} |