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 : 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);
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
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";
}