Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

214
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!