• Publicidad

Duda con una línea

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Duda con una línea

Notapor lis » 2008-10-30 09:59 @458

Hola, amigos del foro, me pasaron un script en que hay una línea que no entiendo del todo y es la siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
system"(mv ../$ctl .)"
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Lo que no entiendo es qué significa el punto al final.
Cualquier ayuda, muchas gracias de antemano.
lis
Perlero nuevo
Perlero nuevo
 
Mensajes: 106
Registrado: 2008-05-27 21:43 @946

Publicidad

Notapor bAsTeR » 2008-10-30 11:06 @504

Ese comando es para mover un archivo. En este caso el que describe la variable $ctl, y el punto al final no estoy muy seguro pero creo que lo mueve a la ruta donde estás actualmente aunque como te digo no estoy muy seguro.

Esperemos otra respuesta más segura.
bAsTeR
Perlero nuevo
Perlero nuevo
 
Mensajes: 63
Registrado: 2008-10-28 11:29 @520
Ubicación: Chihuahua, Chih. Mexico

Notapor natxo » 2008-10-30 13:05 @587

lis escribiste:Hola amigos del foro, me pasaron un script en que hay una línea que no entiendo del todo y es la siguiente:

system"(mv ../$ctl .)"

Lo que no entiendo es qué significa el punto al final.
Cualquier ayuda, muchas gracias de antemano.


Esto no tiene nada que ver con Perl :-)

Lo que haces es mover (mv) un archivo que está en un nivel superior (..) al nivel en que te encuentras (.). Lo hace con un comando shell del sistema (system), aunque lo mismo y seguramente más rápido (al no tener que crear otro proceso) lo puedes hacer con el módulo File::Copy que si no me equivoco es parte de la distribución oficial de Perl.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use File::Copy;
move("../$ctl",".");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
saludos,
Natxo Asenjo
natxo
Perlero nuevo
Perlero nuevo
 
Mensajes: 76
Registrado: 2007-08-09 16:22 @723
Ubicación: Países Bajos

Notapor explorer » 2008-10-30 15:28 @686

En efecto, la línea copia un fichero que está en un nivel superior al nivel en que estamos.

El módulo File::Copy realiza muchas comprobaciones antes de realizar el movimiento, que, primero, lo intenta con un rename(), y si falla, lo intenta con un copy() seguido de un utime() (copiar atributos) y de un unlink() (borrado).

¿Esto tarda más que ejecutar el proceso externo? Pues yo creo que depende, porque el proceso mv va a realizar los mismos pasos (renombrado o copia) pero con menos comprobaciones, ya que el proceso sabe en qué sistema operativo se encuentra y qué reglas puede aplicar.

También depende del número de veces que por unidad de tiempo se ejecute esta línea. Desde luego, es muy costoso crear nuevos procesos externos al nuestro para realizar otras operaciones. Bueno... "era" muy costoso, ya que las máquinas y sistemas operativos actuales son tan rápidos y eficientes que ese costo se ha reducido mucho.

Habría que hacer un benchmark para comprobar qué es mejor.

Desde luego, el hacerlo en Perl tiene una gran ventaja: es independiente del sistema operativo, por lo que, en el futuro, podríamos instalar nuestro programa en otra máquina distinta. Y, también, no tenemos que preocuparnos de saber si el comando mv está disponible en el sistema o no.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron