У меня есть дескриптор файла, который содержит сжатые данные в $ my_fd. Я хотел бы запустить программу декомпрессии (например, «lzop -dc») с перенаправлением $ my_fd в качестве стандартного ввода, поэтому я могу прочитать распакованный вывод в $ out_fd. Как я использую STDIN в другом месте этого код не работает (но это показывает идею):
# Save STDIN file handle
open(my $stdin_copy, "<&", "STDIN");
my $fd = $my_fd;
# Replace STDIN with the file handle
open(STDIN, "<&", $fd);
# Start decompression with the fake STDIN
open($out_fd, "-|", $opt::decompress_program);
# Put STDIN file handle back
open(STDIN, "<&", $stdin_copy);
# Do stuff on the decompressed data
while(<$out_fd>) { ... }
# Do more stuff on the original STDIN
Оба входа ($ FD) и выход ($ out_fd) может быть больше, чем физическая память, так что это не вариант читать все это.
фон
Это будет использоваться для --compress в GNU Parallel.