morcadiss:
As you guessed, using a hash or array can help out. Here's how I'd do it with a hash. The hash key will be the filename I want to write to:
my %Files;
sub open_file {
my $file_name = shift;
die "$file_name is already open" if exists $Files{$file_name};
open my $FH, '>', $file_name or die "$file_name open error: $!";
$Files{$file_name} = { COUNT=>0, FH=>$FH };
}
sub file_handle {
my $file_name = shift;
die "$file_name: Hasn't been opened yet" if ! exists $Files{$file_
+name};
return $Files{$file_name}{FH};
}
sub file_counter {
my $file_name = shift;
die "$file_name: Hasn't been opened yet" if ! exists $Files{$file_
+name};
return $Files{$file_name}{COUNT};
}
sub write_to_file {
my $file_name = shift;
my @stuff_to_print = @_;
die "$file_name: Hasn't been opened yet" if ! exists $Files{$file_
+name};
my $file = $Files{$file_name};
my $FH = $file->{FH};
print $FH @stuff_to_print;
++$file->{COUNT};
}
for my $file ('foo', 'bar', 'baz') {
open_file($file);
}
for my $file ('foo', 'foo', 'baz', 'foo', 'bar') {
my $count = file_counter($file);
write_to_file($file, "Count is $count\n");
}
Note: untested, yadda yadda...
...roboticus
When your only tool is a hammer, all problems look like your thumb.