in reply to Re: Delete files if they match help!
in thread Delete files if they match help!

Hi, I am trying to do this like that, but I am missing something:
use strict; use File::Slurp; ... my $dir_to_open = "../../pics"; my $arch = "../../arch"; while (my $row = $sth->fetchrow_hashref()) { for my $imgfile (map $row->{"image_$_"}, 1..4) { for my $file_to_mv (grep { -f } read_dir($dir_to_open)) { if($file_to_mv=~/$imgfile/) { #move("$dir_to_open/$file_to_mv", $arch); print "Test before move: $dir_to_open/$file_to_mv +<br>"; } } }
Any help on this one?

Replies are listed 'Best First'.
Re^3: Delete files if they match help!
by toolic (Bishop) on Jan 07, 2011 at 18:02 UTC
    Without more details of what problem you are having, the best help I can offer is to start using print to see if your variables contain what you expect them to contain (Tip #2 from Basic debugging checklist).
      Here is what I come up:
      ... my $dir_to_open = "../../pics"; my $dir_to = "../../back"; while (my $row = $sth->fetchrow_hashref()) { for my $imgfile (map $row->{"image_$_"}, 1..4) { my $file_to_move = "$dir_to_open/$imgfile"; if (-e $file_to_move && -f $file_to_move) { move($file_to_move, $dir_to); } #.. then delete the file unlink $file_to_move if (-e $file_to_move && -f $file_to_ +move); } }

      Let me know what you think! Thanks

        I wouldn't bother with -e and -f, I'd go straight to -f. Also, if you're going to delete the original, then why copy it to the new location? Why not just rename the file into the new location and do it all at once? Finally, rather than jumping through hoops with map to get the values from the hash, I'd just get them directly. With those changes, it comes out to something like this:

        ... my $dir_to_open = "../../pics"; my $dir_to = "../../back"; while (my $row = $sth->fetchrow_hashref()) { for my $imgfile (values %$row) { if (-f "$dir_to_open/$imgfile") { rename "$dir_to_open/$imgfile", "$dir_to/$imgfile"; } } }

        ...roboticus

        When your only tool is a hammer, all problems look like your thumb.