[l-linux] Duda de perl...
Ernesto Hernandez-Novich
emhn at telcel.net.ve
Sun Nov 3 10:02:45 CST 2002
On Sat, 2 Nov 2002, Salvador Sosa wrote:
> Hola a los gurus de Perl...
> Todavía estoy traduciendo en script csv2vcard de
> evolution (dispongo de poco tiempo para invertir en
> esto).
>
> El problema lo tengo con la fecha.
> Microsoft Outlook exporta las fechas a veces en
> formato no compatible con Y2k (01/11/02) y a veces en
> formato "extendido" (01/11/2002). El problema que
> tengo es que cuando tiene que interpretar la fecha no
> la interpreta (dd/mm/yyyy) sino (mm/dd/yyyy). Alguien
> puede orientarme donde cambio esto, imagino que en
> Perl? O en el script? esto viene de algo como \d\d.
[...]
> if ($temp =~ /(\d\d)\/(\d\d)\/(\d\d)/) {
> # Y2k !! MS Didn't learn anything.
> # Hope no one was born before 1915
> if ((1900 + $3) < 1915) {
> print $fh "$key:20$3-$1-$2\n";
> } else {
> print $fh "$key:19$3-$1-$2\n";
> }
Cuando se trabaja con expresiones regulares (man perlre) uno puede
"guardar" los resultados de una coincidencia en variables generadas
automáticamente.
$temp =~ /(\d\d)\/(\d\d)\/(\d\d)/
quiere decir "verifica si $temp coincide con el siguiente patrón
dos dígitos (guárdalos)
una barra
dos dígitos (guárdalos)
una barra
dos dígitos (guárdalos)"
Los "guárdalos" quieren decir, colócalos en $1, $2, $3 ..., de modo que
en el bloque de código inmediato puedes usar esas variables. En este
caso, la persona que escribió el código asume (no se si bien o mal) que
$1 es el mes, $2 es el día y $3 es el año; lo que te queda es cambiar
esa interpretación y listo (modificando los print).
Por cierto, notarás los \/ para escapar la /. El autor no es muy versado
en Perl, puesto que el operador de "matching" s puede cambiar sus
delimitadores para hacerlo ver más bonito, i.e.
$temp =~ /(\d\d)\/(\d\d)\/(\d\d)/
es equivalente a
$temp =~ m/(\d\d)\/(\d\d)\/(\d\d)/
que es equivalente a (por ejemplo)
$temp =~ m|(\d\d)/(\d\d)/(\d\d)|
o bien
$temp =~ m#(\d\d)/(\d\d)/(\d\d)#
Nótese que al usar "|" o "#" como delimitador, el propósito de la
búsqueda es mucho más claro y evito tener que escapar las barras.
--
Ernesto Hernández-Novich - Running Linux 2.4.19 i686 - Unix: Live free or die!
Geek by nature, Linux by choice, Debian of course.
If you can't apt-get it, it doesn't exist or isn't important.
GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3
------------------------------------------------------------------------
Enviar e-mail a <majordomo at pm.org> colocando en el cuerpo:
"UNSUBSCRIBE caracas-pm-list" para desuscribirse.
"INFO caracas-pm-list" para conocer las reglas de etiqueta.
------------------------------------------------------------------------
More information about the caracas-pm
mailing list