use strict; use warnings; open my $alusFH, q{<}, \ < ) { if ( m{^(chr[^\t]+)\t} ) { do { open $fileHandles{ $1 }, q{>}, \ $outputFiles{ $1 } or die qq{open: > scalar ref.: \n}; } unless $seen{ $1 } ++; print { $fileHandles{ $1 } } $_; } else { warn qq{Bad line: $_}; } } close $alusFH or die qq{close: << HEREDOC: $!\n}; do { close $fileHandles{ $_ } or die qq{close: > scalar ref.: \n}; } for keys %fileHandles; print qq{$_:\n\n$outputFiles{ $_ }----------\n} for sort keys %outputFiles; #### Bad line: Duff line to be rejected chrabc123: chrabc123 blah blah chrabc123 rootle tootle ---------- chrdef456: chrdef456 burble blurgh ----------