В настоящее время у меня очень простая проблема с захватом вывода команды оболочки с обратной галочкой. Прошу прощения, что проблема довольно простая.
У меня есть отсортированный массив (@valid_runs), который, как я знаю, содержит последовательные повторяющиеся элементы. Я хочу использовать обратные кавычки, чтобы повторить этот массив в uniq. Я хочу захватить STDOUT в массиве. Я пытаюсь сделать это так.
@unique_valids = `echo '@valid_runs' | uniq`;
print @unique_valids;
Этот оператор печати ничего не дает. Если на то пошло, это тоже не так.
@unique_valids = `echo '@valid_runs'`;
print @unique_valids;
Я знаю, как использовать uniq и эхо. Мне это кажется довольно странным. Я думаю, что это больше связано с массивами perl, чем с правильным использованием этих команд. Я искал немного в другом месте, поэтому, пожалуйста, не забрасывайте меня отрицательными голосами только потому, что решение может показаться тривиальным. Еще раз спасибо за ваше время.
ПРИМЕЧАНИЕ о решениях: решение TLP является наиболее простым в плане решения проблемы uniq. Я проявляю гибкость, поскольку во всех ответах предлагалось не выполнять системный вызов для решения этой проблемы. Если функция uniq в Perl такая же, как и в Unix, то массив должен оставаться отсортированным.
Решение Джона Корбетта хорошо работает, если вам не нужен отсортированный результат.
@valid_runs
новой строкой? в противном случаеecho
выдаст только одну строку вывода в качестве входных данных дляuniq
. - person ErikR   schedule 03.08.2012@valid_runs
не пусто? это что-то печатает для меня:@x=(3,2,1);@y = `echo '@x'`;print @y;
- person ErikR   schedule 03.08.2012/raid1/home/pharmacy/morguna/1experiments_copy/1experiments/test10-10/run36415 /raid1/home/pharmacy/morguna/1experiments_copy/1experiments/test10-10/run36415 /raid1/home/pharmacy/morguna/1experiments_copy/1experiments/test10-10/run36416 /raid1/home/pharmacy/morguna/1experiments_copy/1experiments/test10-10/run36416
- person order   schedule 03.08.2012