in reply to Re^3: Creating a .zip file using perl
in thread Creating a .zip file using perl

Hi Wind - I get the following error when running the code,any idea what is wrong?

>perl c:\perl_scripts\zip.pl test C:\dir Use of uninitialized value in pattern match (m//) at c:\perl_scripts\z +ip.pl line 14. Use of uninitialized value in pattern match (m//) at c:\perl_scripts\z +ip.pl line 14. Use of uninitialized value in pattern match (m//) at c:\perl_scripts\z +ip.pl line 14. Use of uninitialized value in pattern match (m//) at c:\perl_scripts\z +ip.pl line 14. Use of uninitialized value in pattern match (m//) at c:\perl_scripts\z +ip.pl line 14. Use of uninitialized value in pattern match (m//) at c:\perl_scripts\z +ip.pl line 14. Use of uninitialized value in pattern match (m//) at c:\perl_scripts\z +ip.pl line 14. Use of uninitialized value in pattern match (m//) at c:\perl_scripts\z +ip.pl line 14. Use of uninitialized value in pattern match (m//) at c:\perl_scripts\z +ip.pl line 14. Use of uninitialized value in pattern match (m//) at c:\perl_scripts\z +ip.pl line 14. Use of uninitialized value in pattern match (m//) at c:\perl_scripts\z +ip.pl line 14. Use of uninitialized value in pattern match (m//) at c:\perl_scripts\z +ip.pl line 14. Use of uninitialized value in pattern match (m//) at c:\perl_scripts\z +ip.pl line 14. Use of uninitialized value in pattern match (m//) at c:\perl_scripts\z +ip.pl line 14. Use of uninitialized value in pattern match (m//) at c:\perl_scripts\z +ip.pl line 14. Use of uninitialized value in pattern match (m//) at c:\perl_scripts\z +ip.pl line 14. Use of uninitialized value in pattern match (m//) at c:\perl_scripts\z +ip.pl line 14. Use of uninitialized value in pattern match (m//) at c:\perl_scripts\z +ip.pl line 14. Use of uninitialized value in pattern match (m//) at c:\perl_scripts\z +ip.pl line 14. Use of uninitialized value in pattern match (m//) at c:\perl_scripts\z +ip.pl line 14. Use of uninitialized value in pattern match (m//) at c:\perl_scripts\z +ip.pl line 14. Use of uninitialized value in pattern match (m//) at c:\perl_scripts\z +ip.pl line 14.

Replies are listed 'Best First'.
Re^5: Creating a .zip file using perl
by wind (Priest) on May 05, 2011 at 07:20 UTC

    Well, since line 14 is:

    next if !/\.lib$/;

    I would surmise that $_ is not being initialized properly.

    Did you change the code in some way that might lead to this? Like by assigning the return value of the readdir call to a variable?

      wind is correct in that $_ is not initialized, readdir does not assign to $_ by default and so the readdir should be assigned to $_ directly.
      while ($_ = readdir( $dh)) {
      Then the script will work correctly.

      print "Good ",qw(night morning afternoon evening)[(localtime)[2]/6]," fellow monks."

        Thanks monks.zip file is getting created but with no data all..i dont see any .lib files in there,there still seems to be a bug.can someone run the below code on a sample directory with libs and see if the zip contains .libs.Please help

        use Archive::Zip qw( :ERROR_CODES :CONSTANTS ); use File::Spec; use strict; use warnings; my $zipfile = shift or die "What's the zipfile?"; my $dir = shift or die "Where's the dir?"; my $zip = Archive::Zip->new(); opendir my $dh, $dir or die $!; print "\nDIR:$dir"; while ($_ = readdir( $dh)) { next if !/\.lib$/; $zip->addFile(File::Spec->catfile($dir, $_), $_); } closedir $dh; # Save the Zip file unless ( $zip->writeToFileNamed($zipfile) == AZ_OK ) { die 'write error'; }

      I didnt change anything...ran as it is...is it working for you?

      printing $dh is showing the below value DIR:GLOB(0x1835244)

      I am running the script as perl c:\perl_scripts\zip.pl test C:\dir,is it not right? C:\dir is the directory it should find the libs,why is DIR not getting initialized?