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

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?

Replies are listed 'Best First'.
Re^6: Creating a .zip file using perl
by Utilitarian (Vicar) on May 05, 2011 at 08:18 UTC
    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'; }
        Eh, I tested that and it works correctly, are there any files ending in .lib in the directory you are interested in (are you looking to check subdirectories or something else that you haven't mentioned?)

        print "Good ",qw(night morning afternoon evening)[(localtime)[2]/6]," fellow monks."
Re^6: Creating a .zip file using perl
by Anonymous Monk on May 05, 2011 at 07:29 UTC

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

Re^6: Creating a .zip file using perl
by Anonymous Monk on May 05, 2011 at 07:33 UTC

    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?