Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

217
Vistas
Escriba datos comprimidos en un archivo usando Perl para que luego se puedan descomprimir sobre la marcha (como STDIN)

Estoy buscando una combinación de técnicas para crear un archivo comprimido. Más tarde, quiero descomprimir ese archivo sobre la marcha y pasar a través de la tubería al comando curl.

El problema es que el código que estoy usando produce un archivo que contiene un flujo de datos comprimido (a diferencia de un archivo):

 my $fh = IO::Zlib->new("file.gz", "wb9"); if (defined $fh) { print $fh "some big data here!\n"; $fh->close; }

Por eso no puedo simplemente descomprimirlo usando zcat:

 zcat file.gz zcat: can't stat: file.gz (file.gz.Z): No such file or directory

y la razón principal para hacer esto es que esperaba redirigir la salida de zcat como STDIN para el comando curl más adelante:

 zcat file.gz | curl -X PUT -d @- http://localhost:5822/

Lo anterior funciona si creo un archivo de texto y lo comprimo. Estaba buscando una manera elegante de hacerlo desde Perl, donde no necesito crear un archivo temporal, comprimirlo, eliminar el archivo temporal primero.

Esto probablemente podría lograrse de dos maneras:

1) encuentre una manera de crear un archivo comprimido que contenga datos de archivo (en lugar de un flujo de datos)

2) encuentre un comando de Linux/Unix/OSX que se ocupe de archivos con datos comprimidos de transmisión (como zcat aparentemente no puede)

Estaría agradecido por la ayuda re. ambos sentidos

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Su código Perl funciona a partir de mis pruebas, con la adición de una línea de uso necesaria:

 use IO::Zlib;

Usted dice que su código produce un archivo que contiene un flujo de datos comprimidos (a diferencia de un archivo). Eso no tiene ningún sentido. Un archivo es un archivo. Es un objeto en un sistema de archivos que contiene una secuencia de bytes. Su código genera un archivo ordinario, cuyo contenido es la salida comprimida de Zlib.

Creo que su problema es que el código no genera el archivo por algún motivo (¿falta de permisos?) O simplemente está buscando el archivo en el lugar equivocado.

Agregue algo de depuración para ver si el archivo se está abriendo correctamente. Reemplace su línea "nueva" con

 my $fh = new IO::Zlib; $fh->open("/full/path/to/filename", "wb9") or die("couldn't open file for writing: $!");

Y use una ruta completa con el nombre del archivo para que pueda estar seguro de dónde se genera el archivo. (Normalmente, se crearía en el directorio actual, pero no está claro dónde está sin contexto)

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda