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'