my $scheme = qr{(http|https|ftp)://};
my $login = qr{([^/]*?:[^/]*?@)};
my $hostname = qr{([^/]*?)};
my $pathname = qr{(/[^?#]*?)};
my $querystr = qr{(\?[^#]*?)};
my $fragment = qr{(\#.*)};
if(/^$scheme$login?$hostname$pathname$querystr?$fragment?$/) {
# Do stuff
}