Next Previous Contents

1. Simplemente Perl y Unix

1.1 Recoger el código de error de rsh

Normalmente al ejecutar un comando en un sistema remoto usando rsh, el código de retorno es el de la propia ejecución de rsh.

Si queremos recibir el código de error del comando remoto podemos usar la sintaxis siguiente:


$res=`rsh 172.16.1.5 'comando >>/dev/null 2>&1; echo \$?'`;

1.2 Bloque de código con temporizador

Para evitar que nuestro guión quede bloqueado en una porción de código si, por ejemplo una ejecución remota no responde, podemos usar el siguiente método.


# asocia una funcion al vencimiento del temporizador
$SIG{ALRM} = \&temporizador;

$time=2;

eval {
  alarm($time);
  ...
# codigo protegio  
  ...
  alarm(0);
};

if ($@ =~ /Vencio el temporizador/){
print "Salgo por temporizacion\n";
}else{
print "Salgo con codigo: $res\n";

}


sub temporizador {
# tratamiento de temporizador
die "Vencio el temporizador";
}

1.3 Temporizadores inferiores al segundo

Usando la función sleep se puede conseguir retardos en los guiones, pero solo en segundos. Para conseguir retardo en periodos inferiores al segundo, o retardos en milisegundos, podemos usar la siguiente sintaxis:


select(undef,undef,undef,0.250);

Que no dara un retardo de 250 msg.

No debemos olvidar que estamos trabajando bajo Unix, y por tanto el sistema no nos asegura la exactitud del retardo. Vamos que esto no es tiempo real.

1.4 Sustitución sobre el mismo fichero

Para sustituir una cadena de caracteres por otra sobre el mismo fichero, conservando una copia de seguridad, podemos usar el siguiente guión:


/usr/bin/perl -p -i.back
s/antigua/nueva/g;

1.5 Crear una clave encriptada para enviar

Si en algun momento queremos enviar una clave por correo, por ejemplo para que nos habran una cuenta en una maquina, seria absurdo enviarla en claro. Cualquiera, incluso la persona a la que se la enviamos, podria anotarla y de esta forma nuestra cuenta no estaria protegida.

Para evitar estos problemas podemos enviarla encriptada usando el siguiente codigo:


perl -e 'print crypt( shift, shift), "\n"' password salt


Next Previous Contents