#!/usr/bin/perl
# Idiom #267 Pass string to argument that can be of any type
# https://p...content-available-to-author-only...s.org/idiom/267/pass-string-to-argument-that-can-be-of-any-type
use v5.10;
use Scalar::Util 'looks_like_number';
sub foo {
my ($x) = @_;
return 'Nothing' if ref $x ne '' or looks_like_number
($x); # return 'x is a reference' if ref $x ne '';
# return 'x looks like a number' if looks_like_number($x);
# return 'x is a string';
}
say foo( [] );
say foo( 42 );
say foo( 'Hello World' );
IyEvdXNyL2Jpbi9wZXJsCgojIElkaW9tICMyNjcgUGFzcyBzdHJpbmcgdG8gYXJndW1lbnQgdGhhdCBjYW4gYmUgb2YgYW55IHR5cGUKIyBodHRwczovL3AuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnMub3JnL2lkaW9tLzI2Ny9wYXNzLXN0cmluZy10by1hcmd1bWVudC10aGF0LWNhbi1iZS1vZi1hbnktdHlwZQoKdXNlIHY1LjEwOwoKdXNlIFNjYWxhcjo6VXRpbCAnbG9va3NfbGlrZV9udW1iZXInOwoKc3ViIGZvbyB7CiAgICBteSAoJHgpID0gQF87CiAgICByZXR1cm4gJ05vdGhpbmcnIGlmIHJlZiAkeCBuZSAnJyBvciBsb29rc19saWtlX251bWJlcigkeCk7ICAgCiAgICAjIHJldHVybiAneCBpcyBhIHJlZmVyZW5jZScgaWYgcmVmICR4IG5lICcnOyAgIAogICAgIyByZXR1cm4gJ3ggbG9va3MgbGlrZSBhIG51bWJlcicgaWYgbG9va3NfbGlrZV9udW1iZXIoJHgpOyAgIAogICAgIyByZXR1cm4gJ3ggaXMgYSBzdHJpbmcnOwogICAgcmV0dXJuICR4Owp9CgpzYXkgZm9vKCBbXSApOwpzYXkgZm9vKCA0MiApOwpzYXkgZm9vKCAnSGVsbG8gV29ybGQnICk7Cg==