On Mon, Jul 07, 2003 at 11:45:34AM -0400, Paul Kraus wrote:
> I am doing a readdir.
> Taking the filenames that are found and trying to rename them.
> 
> Opendir 
> @files = Readdir 
> 
> Foreach @files
>       parse filename
>       $newfile = newfile name based on parsed name
>       push (@rename,[$_,$newfile])
> 
> Foreach @rename
>       rename $$_[0], $$_[1] or die ("NO $!\n")
> 
> I guess I could send all the code but that is pretty much what is taking
> place.
> I have tried to add a closedir before the @rename loop but it does
> nothing.

Well you might try something like this (this would append '.old' to
each filename.  Modify as appropriate):

use File::Basename;

@old = glob('path/to/files/*'); #  don't forget the '*'  !!
@old = map { basename($_} } @old;  # strip off the directory part
@new = map { "$_.old" } @old;  # Get the new versions
while (@old) {
      rename( shift @old, shift @new )  or die "NO  $!";
}


Of course, this can be collapsed a bit:

use File::Basename;
do{ $f=basename($_}; rename( $f, "$f.old" ) or die "NO $!"} 
    for glob('path/to/files/*');


--Dks

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to