use Path::Tiny; my %name2blob; sub extract_zip{ my ($filename) = @_; my $nef = path($filename)->basename('.7z'); my $sts = $nef . ".sts"; my $sevenzcmd="ze e $filename -y -so "; open my $data, "-|", $sevenzcmd . $nef or die "Cannot open 7z $nef:$!"; $name2blob{$filename}{NEF} = path ($data)->slurp; close $data; open $data, "-|", $sevenzcmd . $sts or die "Cannot open 7z $sts:$!"; $name2blob{$filename}{STS} = path ($data)->slurp; close $data; } #### do { local $/; <$data> }