in reply to Determining command line object type

More of a question than ans answer but...wouldn't the -X functions (operators?) do (most of?) the testing you need?

From perlfunc "-X":

-f File is a plain file. -d File is a directory. -l File is a symbolic link. -p File is a named pipe (FIFO), or Filehandle is a pipe. -S File is a socket. -b File is a block special file. -c File is a character special file. -t Filehandle is opened to a tty.

Otherwise, if this is on a Win32 system - Win32API::GetDriveType and/or Win32::GetFiletype maybe what you need.