Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: jcjuank en 19 Julio 2005, 19:12 pm



Título: Una expresion regular en PERL....¡¡No la entiendo
Publicado por: jcjuank en 19 Julio 2005, 19:12 pm
Buen dia. Estoy tratando de traducir un archivo en formato ebcdic a ascii hay un paquete en perl para hacerlo pero las tablas de traduccion q' usan no me sirven. Ya consegui la tabla pero tengo problemas para interpretar la siguiente expresion: eval '$byte=~tr/' . $default . '/\000-\377/'; en $default hay algo como esto $default='\000\001\002\003\234\011....se extiende hasta 255 posiciones. En $byte hay una cadena EBCDIC, empezando no se q' sea /\000-\377/ y no se como haga tr/// para hacer coincidir un caracter en $byte con / . $default . / y reemplasarlo por /\000-\377/.
Intente cambiar un valor de los q' estan en $default pero me cambia todas las cadenas q' convierta. No me deberia cambiar solo una??? Bueno ese es mi problema les agradezco cualquier ayuda.


Título: Re: Una expresion regular en PERL....¡¡No la entiendo
Publicado por: Ivanchuk en 20 Julio 2005, 21:04 pm
Deberias ver la documentacion de perl, que por cierto esta muy bien documentado.
Código:
man perlintro
La descripción de los operadores esta en perlop.
El operador tr es para traducir. tr/ListaDeBusqueda/ListaDeReemplazo/
Le tenes que pasar una lista para que busque y luego otra lista con sus correspondientes reemplazos. Por ej:
Código:
my $algo="1234";
$algo=~tr/1234/Hola/;
print $algo;
De esta manera busca en $algo y reemplaza los 1 por H, 2 por o, 3 por l y 4 por a. El ejemplo imprimira "Hola". Sino le especificas una variable por medio del operador =~ trabaja sobre la variable por defecto $_.
La lista se la podes pasar como un rango tambien por medio del caracter "-"(sin las comillas), ej.:
Código:
my $algo="MAYUSCULA";
#ahora se pasa la cadena a minusculas
$algo=~tr/A-Z/a-z/;
print $algo;
En tu ejemplo, lo que hace es armar una tabla de conversión, de modo que los códigos en EBCDIC están en $default, y su correspondencia es con \000-\377(un rango de números en octal igual a 0-255).
De todas maneras te recomiendo que leas la documentacion, esta todo re bien explicado.
Bytes.


Título: Re: Una expresion regular en PERL....¡¡No la entiendo
Publicado por: jcjuank en 21 Julio 2005, 15:22 pm
Gracias, leere la documentacion q' me recomendaste, no sabia q' \000 era un numero en octal, ese era uno de mis errores.....
Seguire trabajando.