Foros del Web » Programación para mayores de 30 ;) » Programación General »

Cómo hacer esta orden en perl?

Estas en el tema de Cómo hacer esta orden en perl? en el foro de Programación General en Foros del Web. Buenas, Sabéis si se puede traducir estas ordenes de sistema con perl? @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PERL: Ver original TMP = $ ( cat / etc ...
  #1 (permalink)  
Antiguo 29/06/2010, 02:25
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Cómo hacer esta orden en perl?

Buenas,

Sabéis si se puede traducir estas ordenes de sistema con perl?

Código PERL:
Ver original
  1. TMP=$(cat /etc/awstats/web/$file | grep -v "#" | sed '/^$/d' | grep LogFile | awk -F"\"" '{print $2}')
  2. RUTA_FILE=$(dirname $TMP)

Muchas gracias de antemano
  #2 (permalink)  
Antiguo 29/06/2010, 02:56
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 17 años, 11 meses
Puntos: 11
Respuesta: Cómo hacer esta orden en perl?

Eso depende del aspecto de lo que haya dentro del fichero $file.

¿No puedes poner un ejemplo?
__________________
JF^D Perl Programming en Español
  #3 (permalink)  
Antiguo 29/06/2010, 07:55
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Cómo hacer esta orden en perl?

Cita:
Iniciado por jferrero Ver Mensaje
Eso depende del aspecto de lo que haya dentro del fichero $file.

¿No puedes poner un ejemplo?
Tiene muchas lineas comentadas y entre las que no están aparece por ejemplo.

LogFile="/mnt/logs/http/zeusmerged/HOS_vNxHosApa01_http/www.dominio.cat/www.dominio.cat.log.ex%YY-24%MM-24%DD-24"
SiteDomain="www.dominio.cat"
HostAliases="www.dominio.cat"
Include "zeus.generic.conf"
  #4 (permalink)  
Antiguo 29/06/2010, 09:21
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 17 años, 11 meses
Puntos: 11
Respuesta: Cómo hacer esta orden en perl?

Entonces, sería algo así:

Código Perl:
Ver original
  1. $TMP = do { local $/; open $FILE, "</etc/awstats/web/$file"; <$FILE> };
  2. $TMP =~ /^LogFile \s* = \s* " (.*?) "/x;
  3.  
  4. use File::Basename;
  5. $RUTA_FILE = '';
  6. if ($1) {
  7.     $RUTA_FILE = dirname $1;
  8. }

Se puede abreviar un poco, pero más ofuscado.

Código Perl:
Ver original
  1. do { local $/; open $FILE, "</etc/awstats/web/$file"; <$FILE> } =~ /^LogFile \s* = \s* " (.*?) "/x;
  2.  
  3. use File::Basename;
  4. $RUTA_FILE = $1 ? dirname($1) : '';
Utilizamos do{} para hacer la lectura de todo el fichero. Se lo pasamos a una expresión regular, que extrae la información de la entrada LogFile, de lo que hay entre llaves, de la cual extraemos solamente el directorio. Si no encontramos nada en el LogFile, pues obtenemos una cadena vacía.
__________________
JF^D Perl Programming en Español
  #5 (permalink)  
Antiguo 29/06/2010, 09:43
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Cómo hacer esta orden en perl?

Cita:
Iniciado por jferrero Ver Mensaje
Entonces, sería algo así:

Código Perl:
Ver original
  1. $TMP = do { local $/; open $FILE, "</etc/awstats/web/$file"; <$FILE> };
  2. $TMP =~ /^LogFile \s* = \s* " (.*?) "/x;
  3.  
  4. use File::Basename;
  5. $RUTA_FILE = '';
  6. if ($1) {
  7.     $RUTA_FILE = dirname $1;
  8. }
Puedes explicarme para que sirve el if del $1?

if ($1) {

$RUTA_FILE = dirname $1;

}

Muchas gracias
  #6 (permalink)  
Antiguo 29/06/2010, 09:51
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 17 años, 11 meses
Puntos: 11
Respuesta: Cómo hacer esta orden en perl?

$1 almacena lo capturado por los paréntesis, en la expresión regular.

El if() comprueba que hemos capturado realmente algo.

Si no hemos capturada nada, $1 es un valor indefinido, por lo que $RUTA_FILE sigue valiendo la cadena vacía. Si hemos capturado algo, entonces le sacamos el dirname() de él.
__________________
JF^D Perl Programming en Español

Etiquetas: orden, perl
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:49.