Требуется оператор readdir
.
Например:
#! /usr/bin/perl
use warnings;
use strict;
my $dir = "/tmp/foo";
opendir my $dh, $dir
or die "$0: opendir: $!";
while (defined(my $name = readdir $dh)) {
next unless -f "$dir/$name";
print "$name\n";
}
Запуск:
$ ls -F /tmp/foo
a b c d/
$ ./prog.pl
b
c
a
Как видите, имена выводятся в том порядке, в котором они физически хранятся в файловой системе, что не обязательно сортируется.
Чтобы пойти по быстрому и грязному маршруту, вы также можете использовать оператор glob, как в
print map { s!^.*/!!; "$_\n" }
grep !-d $_ =>
</tmp/foo/*>;
Обратите внимание, что вам придется удалить каталоги из результата, а оператор glob не возвращает файлы, имена которых начинаются с точек.