On Sun, Nov 14, 2004 at 09:21:17AM -0500, Robert Rothenberg wrote:
> 
> Reference: some code for testing if an argument is string-like:
> 
> sub is_string_like {
> 
>   return 1,

why the comma?

>     unless (defined $_[0] && ref $_[0]);
>
>   # We don't evaluate whether the "." and ".=" operators are
>   # supported, since for many applications that use strings, the
>   # comparison operators are the most important.
> 
>   eval {
>     ("$_[0]")
>       && (($_[0] cmp $_[0])==0)
>       && ($_[0] eq $_[0])
>       && (!($_[0] ne $_[0]))
>       && (!($_[0] le $_[0]))
>       && (!($_[0] ge $_[0]))
>       && (!($_[0] lt $_[0]))
>       && (!($_[0] gt $_[0]))
>   } and return 1;
> 
>   # Testing for behavior related to copy constructors is another issue
>   # to be determined....

This all seems overkill. Isn't something like this (untested) enough?:

sub is_string_like {
    return 1 unless ref $_[0]; # returns 1 for undef
    return UNIVERSAL::can($_[0], '""');
}

Tim.

Reply via email to