Hi Peter.
Peter wrote:
> I'm trying to figure out how to use File::Find to print the names
> of all the files in selected directories below my working
> directory, but when I run the following script with more than one
> directory name listed on the command line, as in:
>
> $ ./find_practice dir1 dir2
>
> or
>
> $ ./find_practice dir*
>
> ...I get no output at all.
>
> Here's the script:
>
> -------------------------------------
>
> #!/usr/bin/perl
>
> use strict;
> use File::Find;
>
> @ARGV = qw(.) unless @ARGV;
I'd use the more obvious
@ARGV = '.'
here, rather than 'qw' which is a whitespace-separated list of strings.
> print "@ARGV\n";
> find sub {
> print "currently reporting from: $File::Find::dir\n";
> print "$File::Find::name\n";
Nothing wrong here, but do you know that $_ is set to the file name here
(without the path) and your default directory is set to $File::Find::dir?
> }, "@ARGV";
Here's your problem. If you put quotes around an array you'll get
a single string which is all of the array elements separated by a
space. In your example you'd get
"dir1 dir2"
but what you actually want is the list of root directories. Just
find sub {
:
}, @ARGV;
will do it.
> This works find with no command line arguments.
Because you then default @ARGV to ('.') and "@ARGV"
will just be '.'.
> Doesn't "@ARGV" contain a list of arguments, which in this
> case are directories to be traversed?
Exactly right!
HTH,
Rob
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]