Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

229
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda