my $tmpfile = POSIX::tmpnam(); system("unzip -l $filename 2>$tmpfile"); open(OUTPUT, "$tmpfile") || die "Cant open $tmpfile file, $!\n"; while() { ... do something here ... } close(OUTPUT);