
Scalar::does provides a "does()" built-in.
a check that "ref($thing) eq 'array'" doesn't allow you to accept an object that uses overloading to provide an array-like interface.
this package also includes io::detect, for detecting if a scalar is a filehandle (or something filehandle-like).