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

I have so little experience with Perl I shouldn't even be attempting to write this script but it would be darn handy if I can make it work.

I'm trying to get the all of the files from a specific directory which contain 10.xx.11 and move them into another directory. The operation seems to go okay until Perl attempts to move the array elements. I get a "no such file or directory" message pointing to the line containing the move command. I know the directory exists at the correct location. Any help would be much appreciated.

#!/usr/bin/perl -w use strict; use warnings; use diagnostics; use File::Copy; my (@files) = (); my ($file) = 0; my ($directory) = "directory"; opendir (DIR, $directory) || die "could not open $directory: $!\n"; @files = grep {/^10/} readdir DIR; closedir DIR; print("You are moving the following files to another location\n"); foreach $file (@files) { print $file . "\n"; } my ($newlocation) = "target"; foreach my $file (@files) { move($file, $newlocation) || die "could not move files: $!\n"; }

Replies are listed 'Best First'.
Re: No such file or directory when moving grep results
by toolic (Bishop) on Nov 10, 2011 at 18:04 UTC
    You need to prepend the directory name to your file. This works for me:
    move("$directory/$file", $newlocation) || die "could not move file +s: $!\n";

      Thank you very, very much.

Re: No such file or directory when moving grep results
by RichardK (Parson) on Nov 11, 2011 at 11:25 UTC

    Alternatively you could use glob to get the list of file names in one go :)

    my @files = glob( "dir/10.??.11*" );

    But note that :

    • the pattern is not a regex but a file match pattern as used by the shell.
    • The default glob splits its argument on spaces, so if you need to handle paths including spaces then use bsd_glob from File::Glob