my %cache; find({wanted => \&ab_wanted, no_chdir => 1}, $opt{d}); use Data::Dumper; print Dumper \%files, \%cache; sub ab_wanted { if (-r _ && -f _){ $size = int ((-s _) / 2**20); if ($size > $opt{s} && $opt{a} < -A _){ $uid = (lstat(_))[4]; my $name = $cache{$uid}; unless (defined $name) { $name = getpwuid($uid); $cache{$uid} = $name; } push @{$files{$name}}, [ $_, $size, int -A _ ]; } } }