foreach my $directory (@dirs) { opendir (DIR, $directory) or die ("Can't open dir: '$directory'.\nReason: $!"); @ls = readdir(DIR); closedir (DIR); FILE: foreach my $file (@ls) { next if ($file =~ m/^\.\.?$/); $files++; SWITCH: { if (-d "$directory/$file") { push(@dirs, "$directory/$file"); last SWITCH; } if (-l "$directory/$file") { last SWITCH; } if (-f "$directory/$file") { $size = (-s "$directory/$file"); if ($size >= $min_size) { push (@{$top{$size}}, "$directory/$file"); if ($size > $min_size && scalar(keys %top) > $top_n) { ($obsolete_size,$min_size) = (sort {$a <=> $b} keys %top)[0,1]; delete($top{$obsolete_size}); } } last SWITCH; } else { print "\n$file\tis of UNKNOWN type"; } } } } print $sep . "\n"; print "Total number of files examined: $files\n"; print $sep . "\n"; print "List of top " . $top_n . " sized files within " . $dir_init . " :\n"; foreach my $k (sort {$b <=> $a} keys %top) { print delim1000($k) . "\n"; foreach (@{$top{$k}}) { print "\t$_\n"; } } print $sep . "\n"; sub delim1000 { my $text = reverse $_[0]; $text =~ s/(\d\d\d)(?=\d)(?!\d*\.)/$1,/g; return scalar reverse $text; }