sub parse { my $file = shift; if (is_filehandle $file) { # do stuff } elsif (is_filename $file) { open my $fh, '<', $file; return parse($fh); } }