Dear Monks,
I faced a problem like 'Unexpected end of archive' when i open a Zipped file 'Test.zip'.
If i comment the line
#local $\ = "\n";
I get a perfect Result. If anyone can help me.
#Updated Script local $\ = "\n"; use Archive::Zip qw( :ERROR_CODES :CONSTANTS ); print "File Archive Started"; my $zip = Archive::Zip->new(); $member = $zip->addFile( 'Test.txt'); die 'write error' unless $zip->writeToFileNamed( 'Test.zip' ) == AZ_OK; print "File Archive Competed";
Thanks,
Rajesh.K
Edited by [planetscape] - [id://17558|formatting]
The output record separator for the print operator. Ordinarily the print operator simply prints out its arguments as is, with no trailing newline or other end-of-record string added. To get behavior more like awk, set this variable as you would set awk's ORS variable to specify what is printed at the end of the print. (Mnemonic: you set "$\" instead of adding "\n" at the end of the print. Also, it's just like $/, but it's what you get "back" from Perl.)Which means that when Archive::Zip calls 'print' to output a chunk of it's generated binary data, perl appends a '\n' to the end of every chunk. Thus corrupting the archive.
sub display {
local $\ = "\n";
print "This is the first line. Look ma, no newline";
print "This is the second line.";
}
In a brief [Chatterbox] discussion on this point, [Zaxo] made the comment that [cpan://Archive::Zip] could avoid this type of problem by localizing $\ itself.
perlmonks.org content © perlmonks.org and BUU, l.frankline, Rajeshk, virtualsue
prlmnks.org © 2006 edmund von der burg (eccles & toad)
v 0.03