if ($filename =~ m/^(.*)\.(gz|tgz)$/) {
$infd = IO::Zlib->new($infd, "rb");
$filename = $1;
}
elsif ($filename =~ m/^(.*)\.bz2$/) {
pipe(my $rh, my $wh)
or die "failed to create pipe: $!";
if (fork() == 0) {
open(STDIN, "<&", $infd)
or die "failed to dup to STDIN: $!";
open(STDOUT, ">&", $wh)
or die "failed to dup to STDOUT: $!";
exec("bzip2", "-d");
}
else {
undef $wh;
$infd = $rh;
}
}
my $tar = Archive::Tar->new($infd, 0);