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

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

Replies are listed 'Best First'.
Re^5: Delete files if they match help!
by roboticus (Chancellor) on Jan 07, 2011 at 19:38 UTC

    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!