Mathew Snyder wrote:
> John W. Krahn wrote:
>>>>
>>>>my @filenames;
>>>>my $processDir = "/usr/bin";
>>>>
>>>>opendir DH, $processDir or die "cannot open $processDir: $!";
>>>>foreach my $file (sort(readdir DH)){
>>>> push @filenames, $file;
>>>>}
>>>Why not just:
>>>
>>>my @filenames = sort readdir DH;
>
> Being new to Perl I want to learn the "long" and traditional way before
> I begin figuring out all the shortcuts.
Ahh! You mean the non-Perl way. ;-)
> Having been overwhelmed by all of the numerous options and possible
> methods of accomplishing this I took what I understood from everyone's
> suggestions and came up with this:
>
> #!/usr/bin/perl
>
> use warnings;
> use strict;
>
> my $processDir = "/usr/bin";
> my @filenames;
> my $file_count = 0;
>
> opendir DH, $processDir or die "cannot open $processDir: $!";
> foreach my $file (readdir DH){
More traditional would be to use a while loop:
while ( my $file = readdir DH ) {
This reads one entry at a time unlike the foreach loop which has to read all
the entries first.
> next if ($file =~ /^\.]$|^\.\.$/);
> push @filenames, $file;
> }
> closedir DH;
>
> foreach my $filename (sort(@filenames)) {
> $filename = "$processDir/$filename";
> my $mod_time = (stat($filename))[9];
> print "$filename: $mod_time\n";
> $file_count += 1;
> }
>
> print "\nThere are " . $file_count . " items in the filenames array.\n";
Since @filenames in scalar context equates to the number of entries in
@filenames you could just do this:
print "\nThere are " . @filenames . " items in the filenames array.\n";
> Dr. Ruud had mentioned that I was sorting too soon so I placed that in
> the second foreach loop. I corrected the match expression and prepended
> the directory to each file prior to running stat on it but didn't save
> the new value to the array. I was having a hard time understanding the
> -f option and the line with grep in it so I didn't bother with those
> this time around. Perhaps I'll look into how to use them next time.
-f is a file test *operator*. opendir/readdir will give you *all* entries in
a directory and you can use stat/lstat/file tests to distinguish between
"plain" files and other types of "files".
perldoc -f -X
perldoc -f stat
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>