$blocksize = 4096; open( BACKUP, "tar cz $directory |" ) or die "can't fork tar: $!\n"; binmode BACKUP; # just to be on the safe side do { $read = read( BACKUP, $data, $blocksize ) or die "can't read: $!\n"; if ($read) { print $data; }; } while $read; close BACKUP; #### http://invalid.com/cgi-bin/backup.cgi -> http://invalid.com/cgi-bin/backup.cgi/backup.tar.gz