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 :
Le module appelé :
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 #!/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);
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 #!/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"; }
Partager