I'm wondering why you need the hash in the first place. Would it not be simpler to open, write and close the output file for each ID as you're reading the input file? Then you don't need to keep anything in memory. Something like:
use strict; use warnings; open my $in_fh, '<', "human...fa" or die $!; my $out_fh; while (defined(my $line = <$in_fh>)) { if ($line =~ /^>(.*)/) { my $id = $1; if ($out_fh) { close $out_fh or die $!; } open $out_fh, '>', $id or die $!; next; } if ($out_fh) { print $out_fh $line; } }
Note: code above is untested!
Also, you may be better off capturing only known good characters for the ID to avoid special characters (like shell redirection symbols) in filenames.
In reply to Re: I'm trying to print the contents of a hash to newly created files
by vrk
in thread I'm trying to print the contents of a hash to newly created files
by Peter Keystrokes
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |