バグの温床になるのを防ぐために use strict; と use warnings; をお薦めします 変数を宣言するときは my を使ってください 適当に書き直したらこんな感じでしょうか
use strict; use warnings; sub aa { my ($path) = @_; opendir(my $dh, $path) or return -1; my @localfl = sort grep { ! /^\.\.?/ } readdir($dh); foreach my $f (@localfl) { print("1回目 $f\n"); } }