#!/usr/bin/perl
use 5.010;
use strict;
#use warnings;
#use diagnostics;
use Regexp::Common qw/URI net/;
my @URL = qw(
192.178.10.100
192.10.10.100:8080
192.168.10.100/index.html
192.168.10.100:8080/index.html
http://192.168.10.10
https://192.168.10.10:8080
http://192.168.10.100/index.html
https://192.168.10.100:8080/index.htm
ftp://192.168.10.100
ftp://192.168.10.100:8080
ftp://192.168.10.100/index.txt
ftp://192.168.10.100:8080/index.txt
ftp://user:password@192.168.10.100
ftp://user:password@192.168.10.100:8080
ftp://user:password@192.168.10.100/prova/index.html
ftp://user:password@192.168.10.100:8080/prova/index.txt
);
for (@URL) {
say "[$_]";
when (/^$RE{URI}{HTTP}{-scheme => 'https?'}{-keep}$/o) {
say
join("\n\t",
'Es un URL con esquema HTTP',
"Protocolo: [$2]",
"Host: [$3]",
"Puerto: [$4]",
"Ruta: [$5]"
)
;
}
when (/^$RE{URI}{HTTP}{-scheme => 'https?'}{-keep}$/o) {
say
join("\n\t",
'Es un URL con esquema HTTP',
"Protocolo: [$2]",
"Host: [$3]",
"Puerto: [$4]",
"Ruta: [$5]"
)
;
}
when (/^$RE{URI}{FTP}{-password}{-keep}$/o) {
say
join("\n\t",
'Es un URL con esquema FTP',
"Protocolo: [$2]",
"Usuario: [$3]",
"Contraseña:[$4]",
"Host: [$5]",
"Puerto: [$6]",
"Ruta: [$7]"
)
;
}
when (/^$RE{net}{domain}{-nospace}{-keep}$/o) {
say "Es un dominio: [$1]";
}
when (/^$RE{net}{IPv4}{dec}{-keep}$/o) {
say "Es una dirección IP: [$1]";
}
default {
if ("http://$_" =~ /^$RE{URI}{HTTP}{-scheme => 'https?'}{-keep}$/o) {
say
join("\n\t",
'Es un URL con esquema HTTP',
"Protocolo: [$2]",
"Host: [$3]",
"Puerto: [$4]",
"Ruta: [$5]"
)
;
}
else {
say "No sé lo que es [$_]";
}
}
}
__END__
[192.178.10.100]
Es una dirección IP: [192.178.10.100]
[192.10.10.100:8080]
Es un URL con esquema HTTP
Protocolo: [http]
Host: [192.10.10.100]
Puerto: [8080]
Ruta: []
[192.168.10.100/index.html]
Es un URL con esquema HTTP
Protocolo: [http]
Host: [192.168.10.100]
Puerto: []
Ruta: [/index.html]
[192.168.10.100:8080/index.html]
Es un URL con esquema HTTP
Protocolo: [http]
Host: [192.168.10.100]
Puerto: [8080]
Ruta: [/index.html]
[http://192.168.10.10]
Es un URL con esquema HTTP
Protocolo: [http]
Host: [192.168.10.10]
Puerto: []
Ruta: []
[https://192.168.10.10:8080]
Es un URL con esquema HTTP
Protocolo: [https]
Host: [192.168.10.10]
Puerto: [8080]
Ruta: []
[http://192.168.10.100/index.html]
Es un URL con esquema HTTP
Protocolo: [http]
Host: [192.168.10.100]
Puerto: []
Ruta: [/index.html]
[https://192.168.10.100:8080/index.htm]
Es un URL con esquema HTTP
Protocolo: [https]
Host: [192.168.10.100]
Puerto: [8080]
Ruta: [/index.htm]
[ftp://192.168.10.100]
Es un URL con esquema FTP
Protocolo: [ftp]
Usuario: []
Contraseña:[]
Host: [192.168.10.100]
Puerto: []
Ruta: []
[ftp://192.168.10.100:8080]
Es un URL con esquema FTP
Protocolo: [ftp]
Usuario: []
Contraseña:[]
Host: [192.168.10.100]
Puerto: [8080]
Ruta: []
[ftp://192.168.10.100/index.txt]
Es un URL con esquema FTP
Protocolo: [ftp]
Usuario: []
Contraseña:[]
Host: [192.168.10.100]
Puerto: []
Ruta: [/index.txt]
[ftp://192.168.10.100:8080/index.txt]
Es un URL con esquema FTP
Protocolo: [ftp]
Usuario: []
Contraseña:[]
Host: [192.168.10.100]
Puerto: [8080]
Ruta: [/index.txt]
[ftp://user:password@192.168.10.100]
Es un URL con esquema FTP
Protocolo: [ftp]
Usuario: [user]
Contraseña:[password]
Host: [192.168.10.100]
Puerto: []
Ruta: []
[ftp://user:password@192.168.10.100:8080]
Es un URL con esquema FTP
Protocolo: [ftp]
Usuario: [user]
Contraseña:[password]
Host: [192.168.10.100]
Puerto: [8080]
Ruta: []
[ftp://user:password@192.168.10.100/prova/index.html]
Es un URL con esquema FTP
Protocolo: [ftp]
Usuario: [user]
Contraseña:[password]
Host: [192.168.10.100]
Puerto: []
Ruta: [/prova/index.html]
[ftp://user:password@192.168.10.100:8080/prova/index.txt]
Es un URL con esquema FTP
Protocolo: [ftp]
Usuario: [user]
Contraseña:[password]
Host: [192.168.10.100]
Puerto: [8080]
Ruta: [/prova/index.txt]