in reply to Passing filehandles to subroutines

As already mentioned, on Perl 5.6+ you can simply
open my $fh, "<", $filename;
and then pass $fh around. If you want to be compatible with earlier versions, it is only slightly more verbose:
use Symbol qw(gensym); # ... open +(my $fh = gensym), "<$filename";
And yes, this is definitely going to stay with us in Perl 5. In Perl 6 you'll be doing things entirely differently:
my $fh = open "<", $filename;
Though the other syntax will probably remain supported. Still I'm definitely switching to this new construct as soon as possible.

Makeshifts last the longest.