in reply to Variable Filehandles

I'm not 100% sure what you're asking. It would help if we had some sample data and some example results.

If you just have a string with items separated by dots, split might be able to do the job:

use IO::File; ... my %fd; my %files = ( 'somestring' => 'somefilename', 'someother' => 'someother', ); my @items = ( 'somestring.this.content.will.go.into.somefilename', 'someother.this.will.go.into.someother', 'notthere.this.will.generate.a.warning', ); foreach @items { my @array = split(/\./); if (exists($files{$array[0]})) { $fd{$array[0]} ||= new IO::File "> $files{$array[0]}" or die "Couldn't open $files{$array[0]}: $!"; $fd{$array[0]}->print; } else { warn "No filename defined for $array[0]"; } } $fd{$_}->close for keys %fd;
Or do you mean something more like this:
my @array = ( [ 'somefilename', @data1 ], [ 'otherfilename', @data2 ], ); foreach @array { my $filename = shift(@{$_}); open(F, ">$filename") or die "Couldn't open $filename: $!"; print F join("\n", @{$_}), "\n"; }
If that doesn't look like it helps you with your problem (or at least puts you on the track to adapting some of this to your solution), please give us more information.