in reply to Re: Mass file renaming
in thread Mass file renaming

The data sample is currently stored on my C:/temp local drive. Admin, User, Everyone, System permissions are all Full Control.

I have chdir to C:/Temp/Storage and verified by cwd.

$oldfile name is typically location.csv ie "Langden Brook.csv"

$newfile name is typically 573796RSst.csv

What I find difficult to get my head around is that I can rename a file in the same dir so long as the filextension is not the one referenced in the foreach(@files) where the filehandle is say all csv files in the dir.

Thanks again.

Replies are listed 'Best First'.
Re^3: Mass file renaming
by Aristotle (Chancellor) on Nov 07, 2005 at 15:29 UTC

    You didn’t answer my question. I didn’t want to know what you think is in the variables; that’s just programming by coincidence. 99% of the bugs I encounter are due to variables containing things are than what I expected they would. Put an actual warn "$newfile $oldfile" if not $success; or some such in your code and make sure you know what the variables contain.

    Makeshifts last the longest.

      Hi

      You're right, I didn't, but I already have the following code which does what you say, so I do know that the vars going in to the rename are good:

      print qq{Attempting to rename $oldname to $newname\n};

      $success=rename $oldname, $newname;

      if ($success){print "Changed $oldname to $newname\n"}

      else {print "Failed to rename $oldname to $newname $!\n";exit};

      so I do actually know what's in there and its right enough - eg renaming Greenberfield.csv to 573427RSSt.csv

      Thanks again.

        Ah, okay. It would help to say something along those lines (“I’ve printed the variables, their values are as expected”) right from the start, so people know that’s not it.

        Makeshifts last the longest.

        Please read Writeup Formatting Tips, the code in your posts is quite difficult to read.

        This has probably nothing to do with your problem, but I'd suggest that you put a couple of markers around the variables you print, like in:

        if ($success){ print "Changed [$oldname] to [$newname]\n" } else { print "Failed to rename [$oldname] to [$newname] $!\n"; exit };
        just to be sure that there aren't stray trailing spaces wandering in your string. You could also go deeeper trying to see some hex dump of the strings, for example with:
        sub hex_dump { unpack "H*", $_[0]; } print "\$oldname = [", hex_dump($oldname), "]\t"; print "\$newname = [", hex_dump($newname), "]\n";
        If you don't want to check these hex dumps, you can ensure that your filename only contains letters, digits and dots:
        $newname =~ tr/a-zA-Z0-9\.//cd;

        Back to your particular case: are you sure that the destination file -- i.e. 573427RSSt.csv -- does not exist or, if it exists, it is writeable?

        Flavio
        perl -ple'$_=reverse' <<<ti.xittelop@oivalf

        Don't fool yourself.