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

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).

Replies are listed 'Best First'.
Re^4: Delete files if they match help!
by Anonymous Monk on Jan 07, 2011 at 18:55 UTC
    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.

        why copy it to the new location? Why not just rename the file into the new location and do it all at once?

        The move (from File::Copy) which the OP was using is essentially a rename that also works across file system boundaries. With source and destination being on the same file system, it simply does a rename under the hood. With different file systems, it copies the file to the destination and deletes the source.

        In other words, it's more flexible in case this should be required. Otherwise, it's the same anyway, i.e. a rename.

        You are right, I should do this way no "jumping through hoops". Thanks for your feedback!