Perl 获取第249行Archive.pm中未定义的值时无法调用desiredCompressionMethod

Perl 获取第249行Archive.pm中未定义的值时无法调用desiredCompressionMethod,perl,Perl,我正在尝试用下面的代码压缩文件,但出现以下错误“无法在Archive.pm第249行的未定义值上调用desiredCompressionMethod”。下面是我的代码。请建议 use Archive::Zip qw( :ERROR_CODES :CONSTANTS ); my $zip = Archive::Zip->new(); my $dir_member = $zip->addDirectory( 'D:\advapp\PSMAG\Scripts\T

我正在尝试用下面的代码压缩文件,但出现以下错误“无法在Archive.pm第249行的未定义值上调用desiredCompressionMethod”。下面是我的代码。请建议

    use Archive::Zip qw( :ERROR_CODES :CONSTANTS );

    my $zip = Archive::Zip->new();

    my $dir_member = $zip->addDirectory( 'D:\advapp\PSMAG\Scripts\Testing/' );
    my $file_member = $zip->addFile( 'xyz.txt', 'abc.txt' );
    unless ( $zip->writeToFileNamed('someZip.zip') == AZ_OK ) {
    die 'write error';
    }

    my $somezip = Archive::Zip->new();
    unless ( $somezip->read( 'someZip.zip' ) == AZ_OK ) {
    die 'read error';
    }
    my $member = $somezip->memberNamed( 'stringMember.txt' );
    $member->desiredCompressionMethod( COMPRESSION_DEFLATED );
    unless ( $zip->writeToFileNamed( 'someOtherZip.zip' ) == AZ_OK ) {
    die 'write error';
    }

您创建了一个包含两个文件的zip存档:

现在,您尝试在同一存档中查找名为
stringMember.txt
的文件

显然,该文件不存在,因此无法找到该文件

将ref返回给文件名等于给定文件名或undef的成员$字符串必须为Zip(Unix)文件名格式

因此,如错误消息所示,您无法对该未定义的值调用
desiredCompressionMethod



如果从文档中复制代码,请确保复制所有代码,或者将部分更改为复制以适合您的代码。

即使删除这一行,我也会遇到相同的错误。my$member=$somezip->memberNamed('stringMember.txt')@除非删除该行,
$member
根本不会声明。您是否有
使用严格
使用警告
?如果声明了
$member
并包含Zip::Archive member which对象,则只能对其执行操作。您好simbabque,考虑到您所说的行返回undef,我已将修改后的行添加到当前的文件名中,仍然收到相同的错误。我是perl新手,请告诉我哪里出了问题。我恐怕不熟悉Archive::Zip。有一个方法
memberNames
,它应该返回存档中的所有文件名。调用该选项并使用Data::Dumper或Data::Printer进行检查。那就从那里开始吧。
my $file_member = $zip->addFile( 'xyz.txt', 'abc.txt' );
my $member = $somezip->memberNamed( 'stringMember.txt' );