use warnings; use strict; use IO::Compress::Zip qw/$ZipError/; use Encode qw/encode/; my @lines = (qw/ Hello World Foo Bar /, "\N{U+1F42A}"); my $eol = "\r\n"; my $encoding = "UTF-8"; # or maybe "CP1252" for Windows binmode STDOUT; # just to play it safe my $z = IO::Compress::Zip->new('-', # STDOUT Name => "Filename.txt" ) or die "zip failed: $ZipError\n"; for my $line (@lines) { $z->print( encode($encoding, $line.$eol, Encode::FB_CROAK|Encode::LEAVE_SRC) ); } $z->close();