http://qs1969.pair.com?node_id=780335

transiency has asked for the wisdom of the Perl Monks concerning the following question:

I've written a script to handle all those annoying !unix naming conventions i often run across. It renames anything not a \w.~/- to _. It works great except it finds and traverses .. and . which cause it to escape from the intended directory it was suppose to do its operations on. I cant seem to find the source of this bug, anyone help a monk out? Thanks.

PS i tried nexting out on . and .. but it just got stuck in a nexting loop (appearantly infinite)
#!/usr/bin/perl use warnings; use strict; use File::Rename qw(rename); use File::Find; our $VERSION = '0.1.3'; ### NAME NORMALIZER ### my @torename = (); my @dirs = (); my $DIR = shift @ARGV; opendir(TOCLEAN, "$DIR") or die $!; @dirs = sort readdir(TOCLEAN); @dirs = map { $_ = $DIR . $_ } @dirs; find(\&cleanup, @dirs); sub cleanup{ return if !stat; my $name = $File::Find::name; my $dir = $File::Find::dir; #next if($name =~ /[^\.]|[^\.\.]/g); if(/[^a-zA-Z0-9_\-\/\.~]/){ print "$name\n"; push(@torename, "$name"); } } if(@torename > 0){ print "Renaming files now..\n"; sleep 1; rename @torename, sub { s/[^a-zA-Z0-9_\-\/\.~]/_/g }, 1; } else{print "No files found to rename.. Exiting\n"};
foreach(@the_wicked){sleep(0);}