Something I just found via a google search... foreach (@_) { $min = $_ if $min > $_; }
$min now holds the smallest value of the array. BTW, shouldn't line 21 be write $fileref STDOUT? I've not gone over the code, but if you are looking for the smallest array value, then only writing out once that's been found I'd guess you were trying to write out that value. John -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]] Sent: 11 January 2002 16:58 To: [EMAIL PROTECTED] Subject: Help with File::Find Hi Everyone! I'm fairly new to Perl, and completely new to submitting to the list, so please be easy on me. :-) The purpose of the code I wrote (listed below) is to go through the current directory and all of its subdirectories and report the filename, size and age of the x largest files, where x depends on the argument supplied on the command line and the number of files in the directory. I'm sure there's an easier way to do this with a UNIX utility (or with Perl), but this program has been a good learning experience for me. The code below runs without any syntax errors, but File::Find (which I love and use frequently) or the -e file test doesn't give the results I expect. Specifically, my (explicit) checks show that the test in line 11 does not always evaluate to TRUE for values of $_ corresponding to legitimate (i.e., existing and size > 0) files, which means I'm missing files that should be in my final output. If I change line 11for debugging purposes to simply if ($_){ all files (including the previously missed ones) are printed out (also along with the directories now) as expected, but for the files that would not have passed the (-e $_) test, the values assigned for filesize and age in line 12 are (tested to be) undefined. If this is any help, the files that don't pass the (-e $_) of test of line 11 are (perhaps coincidentally) the biggest files (~55 GB) in the directory. I've researched the File::Find documentation and checked the FAQ's with no luck, so I'm hoping someone out there can help me. Also, is there a function that returns a minimum value in an array? It's not my biggest concern right now, but it would make line 20 simpler. 1: #!/usr/local/bin/perl -w 2: 3: use Cwd; 4: use File::Find; 5: use FileHandle; 6: 7: ($filecount = shift) || ($filecount = 20); 8: 9: sub wanted{ 10: my $flag = 0; 11: if (-e $_){ 12: push(@filelist, [$File::Find::name, -s $_, -M $_]); 13: } 14: } 15: 16: $dir = cwd(); 17: 18: find(\&wanted,$dir); 19: 20: foreach $fileref ((sort {$b->[1] <=> $a->[1]} @filelist)[0..(sort( {$a <=>$b} $filecount,scalar(@filelist)-1))[0]]){ 21: write STDOUT; 22: } 23: 24: STDOUT -> format_name("STDOUT_BOT"); 25: write STDOUT; 26: 27: format STDOUT_TOP= 28: FILENAME FILE SIZE (BYTES) AGE (DAYS) 29: ---------------------------------------------------------------------------- -------------------------------------- 30: . 31: format STDOUT= 32: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<< >>>>>>>>>>>>>>>> @>>> 33: $fileref->[0], $fileref->[1], sprintf("%4.0f", ($fileref->[2])) 34: . 35: format STDOUT_BOT= 36: ---------------------------------------------------------------------------- ------------------------------------- 37: . ... -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------Confidentiality--------------------------. This E-mail is confidential. It should not be read, copied, disclosed or used by any person other than the intended recipient. Unauthorised use, disclosure or copying by whatever medium is strictly prohibited and may be unlawful. If you have received this E-mail in error please contact the sender immediately and delete the E-mail from your system. -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]