Следующие будут читать все файлы в текущем каталоге,
и хранить их в одном массиве. Исключает подкаталоги, но включает
файлы, которые начинаются с символа .
. Затем он создает 2 других массива из 1-го массива. См. Файл :: Slurp .
use strict;
use warnings;
use File::Slurp qw(read_dir);
my @all_files = grep { -f $_ } read_dir('./');
my @pfiles = grep {/^Primary/ } @all_files;
my @sfiles = grep {/^Secondary/} @all_files;
Я постараюсь ответить на ваши вопросы сейчас.
system
возвращает состояние выхода внешней команды (например, ls
). Не возвращает список каталогов. Вы должны использовать qx
для возврата списка каталогов. См. system .
Таким образом, поскольку ваша команда ls
успешно выполняется, ее состояние выхода равно 0. Таким образом, system
возвращает 0. Это значение сохраняется в 1-м элементе вашего массива. Это единственное значение в вашем массиве. Любой другой вывод, который вы видите, исходит от вашего grep
, я считаю.
Кроме того, единственный способ приблизиться к воспроизведению ваших выходных данных - изменить канал на точку с запятой в вашем вызове system
и избавиться от *
:
@primary = system("ls test_77 > test ; grep Primary test");