Gan Uesli Starling wrote:
>
> Am wanting to get a list of files in a directory, but only
> files which are not themselves further sub-directories.
>
> When I do this...
>
> opendir(DIR, $this_path) or die "Can't opendir $this_path: $!";
You are opening the directory with opendir() but you are not reading the
files with readdir().
> @file_list = glob("*");
If you use glob() then you don't have to use opendir() and closedir().
> closedir(DIR);
>
> ...it gives all the files, including the files which are also
> directories. Now on UNIX I can get a long list of all files, then grep
> out the directories, then sed out all but the names on every line. That
> works like so on NetBSD...
>
> $file_list = `ls -l | grep -v "^d" | sed 's/.* //g'`;
> @file_list = split /\n/, $file_list;
> shift @file_list;
>
> ...which does exactly what I want. It lists the files which are not
> directories.
>
> But I am writing in Perl so as to NOT be OS dependent. I looked into the
> -d test. But it seems an awful kludge to have to open every file and get
> a status on it.
You don't have to open the file just to use stat() or the file test
operators.
> Is there a pure Perl way to get a list of file names exclusive of any
> sub-directory names that will work multi-platform?
Using opendir(), readdir() and closedir():
opendir DIR, $this_path or die "Can't opendir $this_path: $!";
my @file_list = grep !-d, readdir DIR;
closedir DIR;
Using glob():
my @file_list = grep !-d, glob "$this_path/*";
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]