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.
In reply to Re: Unable to get counter to reset
by roboticus
in thread Unable to get counter to reset
by morcadiss
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |