#!/usr/bin/perl -w use strict; # Some code to build your complex hash OpenFiles(); foreach my $n (keys %emp){ my $print = CheckData($n); if ($print) { select $print; print $emp{$n}{'Emp'}; } } sub OpenFiles { mkdir "reports", 0755 || warn "Cannot make reports director: $!"; chdir ("reports") || die "couldn't change to directory : $!"; # All the open statements } sub CheckData { return "A" $emp{$_[0]}{'Emp'} if $emp{$_[0]}{'Org'}=~/ABC/; # etc }