B<is_url()> returns true/false according to whether the string passed
to it "looks like" a well formed URL.
Basically we do this by passing it to URI::URL and seeing if it barfs
or not. The preceeding regexp is just so we don't bother
instantiating URI::URL if it's not needed.
=head1 SCRIPT CATEGORIES
Web/Misc
=cut
use strict;
sub is_url {
my $string = shift;
my $uri;
# Basically, look for something vaguely resembling a URL,
# then hand it off to URI::URL for examination
local $SIG{__DIE__} = 'DEFAULT'; # URI::URL croaks on failure
if ($string =~ /(\w+:.+)/) {
# looks more or less right
require URI::URL; # load URI::URL on demand only. only loads once
# Don't assume http.
URI::URL::strict(1);
eval { $uri = URI::URL->new($1); };
return !$@; # $@ is true if the eval failed
} else {
return 0;
}
}