• Publicidad

File::Copy

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

File::Copy

Notapor Eowyn » 2013-02-26 06:32 @313

Hola,

estoy intentando instalar el módulo File::Copy en Debian pero no me deja. De hecho ya tengo problemas con la instalación de CPAN, porque a pesar de seguir los pasos de los tutoriales no parece instalarse bien. ¿Podría alguien por favor decirme desde el principio qué debo hacer?

Estoy siguiendo esto: http://rm-rf.es/como-instalar-modulos-de-perl-via-cpan/ pero ya sólo al escribir la primera línea no me sale nada igual a lo que se supone que debería salir.

Gracias.
Eowyn
Perlero nuevo
Perlero nuevo
 
Mensajes: 45
Registrado: 2011-06-04 08:51 @410

Publicidad

Re: File::Copy

Notapor explorer » 2013-02-26 07:00 @333

Es muy extraño eso que dices... File::Copy debería estar instalado de base con Debian...

Comprueba a ver si ya está instalado:

perl -MFile::Copy -e 1

Si no sale errores, es que sí está instalado.

En Debian, hay un montón de paquetes de CPAN que ya están debianizados, por lo que no necesitas instalarlos desde CPAN.

En concreto, para instalar el File::Copy, te vale ejecutar esto como root:

apt-get install libfile-copy-perl

pero... no te va a funcionar por lo dicho antes: File::Copy ya está instalado de base con el paquete perl, en Debian. No existe como paquete libfile-copy-perl.

Mejor dicho: Debian tiene ese módulo y todos los principales en un paquete llamado perl-modules. Así que deberías entonces instalarlo con

apt-get install perl-modules

pero... debería estar ya instalado. Dudo mucho que un sistema Debian no funciona sin él.

Hace poco pusimos un tutorial en el foro de Formación: Instalación de módulos y bibliotecas en Perl
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: File::Copy

Notapor Eowyn » 2013-02-27 04:58 @249

Vale, vale. Gracias.

Parece que eso en concreto está bien y he cometido un tremendo error.

Es que pretendo meter un archivo de texto mediante el teclado, guardar ese archivo y copiarlo entonces en otra variable. Me da error en el copy pero debe ser porque ni siquiera guarda el archivo en la variable.
Eowyn
Perlero nuevo
Perlero nuevo
 
Mensajes: 45
Registrado: 2011-06-04 08:51 @410

Re: File::Copy

Notapor explorer » 2013-02-27 06:13 @300

Sin ver el código, es difícil de decir.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: File::Copy

Notapor Eowyn » 2013-02-27 06:26 @310

Aquí va:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use File::Copy;
  5.  
  6. print ("introducir nombre de archivo: \n");
  7. my $fitxategia = <STDIN>;
  8. open (FITX, $fitxategia) or die "Error";
  9. while (my $line=<FITX>)
  10. {
  11.         print FITX $line;
  12. }
  13. close(FITX);
  14.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Eowyn
Perlero nuevo
Perlero nuevo
 
Mensajes: 45
Registrado: 2011-06-04 08:51 @410

Re: File::Copy

Notapor explorer » 2013-02-27 06:55 @330

A ver... esto es un lío...

  • declaras que quieres usar File::Copy en la línea 4, pero luego no lo usas en ninguna parte del programa
  • en la línea 8 abres un archivo en modo lectura, lo cual está bien porque luego lo vas a leer, línea a línea, pero en la línea 11, quieres escribir esas líneas en ese mismo manejador de archivos.
Eso no puede funcionar:
  • si el manejador FITX está abierto en modo de lectura, no puedes escribir en él, salvo que uses las marcas especiales de lectura/escritura simultánea en el open() (ver perldoc -f open)
  • no es recomendable leer y escribir en el mismo archivo, salvo que tengamos muy claro dónde lo estamos haciendo: si leemos una línea, el puntero de lectura/escritura se mueve al principio de la línea siguiente, por lo que si ahora mandamos escribir, lo hará sobre esa línea, no sobre la anterior.

Lo que realmente quieres hacer es:
  • abrir el archivo en modo lectura (open)
  • hacer un bucle por todas las líneas (while)
  • ir almacenando las líneas en una única variable ($archivo .= $linea)
  • después del bucle, ya tienes en $archivo todo el archivo
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. print ("Introducir nombre de archivo: ");
  6. my $fitxategia = <STDIN>;
  7. chomp $fitxategia;                   # quitamos carácter de nueva de línea
  8.  
  9. my $archivo;
  10. open (FITX, $fitxategia) or die "Error: no puedo leer el archivo: $!\n";
  11. while (my $line = <FITX>)
  12. {
  13.     $archivo .= $line;               # forma abreviada de "$archivo = $archivo . $line"
  14. }
  15. close(FITX);
  16. # aquí ya tenemos el archivo en $archivo
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Otra forma más abreviada de hacerlo: decirle a Perl que no queremos hacer operaciones de lectura línea a línea, sino todo el archivo de golpe:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use autodie;                         # "Es mejor morir que regresar con deshonor. -Proverbio Klingon"
  5.  
  6. print ("Introducir nombre de archivo: ");
  7. my $fitxategia = <STDIN>;
  8.  
  9. my $archivo;
  10. open(my $FITX, $fitxategia);
  11. {
  12.     local $/;                        # activamos modo aspiradora
  13.     $archivo = <$FITX>;              # ¡ssshhhuuuuup!
  14. }
  15. close $FITX;
  16.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
(ejemplo sacado de perldoc perlvar, sección Variables related to filehandles)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: File::Copy

Notapor Eowyn » 2013-02-28 16:38 @735

Muchísimas gracias. Tienes una paciencia increíble. Gracias.
Eowyn
Perlero nuevo
Perlero nuevo
 
Mensajes: 45
Registrado: 2011-06-04 08:51 @410


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 30 invitados