Fri Aug 30 20:11:35 2013: Request 88297 was acted upon.
Transaction: Ticket created by NGLENN
Queue: PAR-Packer
Subject: -M crashes pp if option contains backslashes
Broken in: 1.014
Severity: (no value)
Owner: Nobody
Requestors: [email protected]
Status: new
Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=88297 >
Doing `pp -M path\to\my\Lib.pm` causes a failure: Can't call method
"desiredCompressionMethod" on an undefined value at C:/[my path]/PAR/Packer.pm
line 1139.
The problem is that Archive::Zip stores members with Unixy names, but Packer.pm
was keeping the name with backslashes in it. Then when it called
$zip->member($in), the member with the given name didn't exist. I'm including a
patch to fix this (generated with diff -u Packer.pm PackerNew.pm > file).
--- /var/tmp/.diff790528876 2013-08-31 04:06:21.000000000 +0400
+++ /var/tmp/.diff1747176174 2013-08-31 04:06:21.000000000 +0400
@@ -1135,7 +1135,10 @@
$oldsize += length($str);
$self->_vprint(1, "... adding <string> as $in");
- $zip->addString($str => $in)->unixFileAttributes(0644);
+ my $member = $zip->addString($str => $in);
+ $member->unixFileAttributes(0644);
+ # Archive::Zip might have renamed member to something more Unixy
+ $in = $member->fileName;
$zip->memberNamed($in)->desiredCompressionMethod($method);
$zip->memberNamed($in)->desiredCompressionLevel($level);
}