if (ref $param) { # it isn't a simple string, assume it is a filehandle $fh = $param; } else { open $fh, "<", $param or die "$param: $!"; } #### my $type = ref $param; if (!$type) { # it's a simple scalar } elsif ($type eq 'GLOB') { # an unblessed GLOB ref } elsif ($type eq 'IO::Handle') { # it's a non-overloaded IO::Handle } else { ... } #### if (!ref $param) { # scalar } elsif (ref($param) eq 'GLOB') { # GLOB } elsif ($param->isa('IO::Handle')) { # is, or inherits from, IO::Handle } else { ... } #### if (!ref $param) { # scalar } elsif ($param->can('readline')) { # who knows what it is? But it supports a readline method ... } else { ... } #### Can't locate method 'readline' via package 'IO::StrangeHandle'