in reply to Unable to get counter to reset

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.

Replies are listed 'Best First'.
Re^2: Unable to get counter to reset
by morcadiss (Initiate) on Jan 13, 2015 at 17:19 UTC
    Thank you!