Perl: подавлять вывод обратной кавычки, когда файл не найден

В моем коде:

$status = `ls -l error*`;

Он показывает вывод: ls *error No such file or directory. Как я могу подавить это сообщение. Меня интересует определение того, генерируются файлы ошибок или нет. Если да, мне нужен список файлов, иначе игнорируйте (без печати сообщения)


person iDev    schedule 09.08.2013    source источник


Ответы (1)


Запустив его как

$status = `ls -l error* 2> /dev/null`;

и подавляя вывод внешней команды на стандартную ошибку.

Если вам нужны только имена файлов (а не вся остальная информация, которую дает вам переключатель ls -l), это можно сделать на чистом Perl с помощью оператора вроде

@files = glob("error*");
if (@files == 0) { 
    ... there were no files ...
} else { 
    ... do something with files ...
}

и если вам нужна вся остальная информация, которую вы получаете от ls -l ..., применяя встроенную функцию stat для каждого имени файла может дать вам ту же информацию.

person mob    schedule 09.08.2013
comment
Спасибо @моб! Это сработало, когда я использовал ls -l error* 2>/dev/null . Я пробовал это с ls -l error* 2>&1, но это не сработало. Тут немного запутался - person iDev; 10.08.2013
comment
2>&1 означает поместить стандартный поток ошибок (файловый дескриптор 2) в стандартный вывод (файловый дескриптор 1). 2>/dev/null означает отбросить стандартный поток ошибок. - person mob; 10.08.2013
comment
Спасибо! Наконец-то понял разницу :) - person iDev; 10.08.2013