Harry Putnam wrote at Sat, 07 Jun 2003 02:18:32 -0700:

>> So you can use:
>>
>>   if (-f $file) {
>>     :
>>     # process file
>>   }
>>   elsif (-d $file) {
>>     :
>>     # process directory
>>   }
>>   }
> Well, yes of course I can run each filename thru all those tests, but that
> seems kind of like a lot of huffing and puffing.  I wondered if there
> isn't something that just spits it out.
> 
> perl `stat' does do that very thing in element[2] ($mode) but extracting
> `type' from that number looks hideously complicated.
> 
> Maybe running all possible tests is quicker and easier after all. It would
> really come down to just these:
>     -f -d -l -b -c -p -S
> But all that info is available in @elems = (stat "fname");
> 
> Unix `stat' actually spits it out in plain english, what type it is. (at
> least gnu `stat' does)

If you write instead
if (-f $file) {
    #
} elsif (-d _) {
    #       ^
}

Then there is no extra stat call.
The underscore _ holds the results of the last stat call (implicitly
called by the -f operator), so no unnecessary work needs to be done.

So you gain all stat informations in equivalent access time, but with a
much improvement in readability.

(A typical statement of my programs look e.g. like
if (-e $file && -f _ && -M > 3) { ...
    # process existing files, older than 3 days
}
)


Greetings,
Janek

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to