Вы можете выполнять системные команды различными способами, некоторые лучше, чем другие.
- Использование
system();
, которое печатает выходные данные команды, но не возвращает выходные данные в сценарий Perl.
- Использование обратных галочек (``), которые ничего не печатают, но возвращают вывод скрипту Perl. Альтернативой использованию настоящих обратных галочек является использование функции
qx();
, которая легче читается и выполняет то же самое.
- Использование
exec();
, которое делает то же самое, что и system();
, но вообще не возвращается к сценарию Perl, если только команда не существует или не выполняется.
- Использование
open();
, которое позволяет вам либо направить ввод из вашего скрипта в команду, либо прочитать вывод команды в ваш скрипт.
Важно отметить, что перечисленные вами системные команды, такие как cp
и ls
, намного лучше выполняются с использованием встроенных функций в самом Perl. Любой системный вызов - это медленный процесс, поэтому используйте встроенные функции, когда желаемый результат является чем-то простым, например, копирование файла.
Некоторые примеры:
# Prints the output. Don't do this.
system("ls");
# Saves the output to a variable. Don't do this.
$lsResults = `ls`;
# Something like this is more useful.
system("imgcvt", "-f", "sgi", "-t", "tiff", "Image.sgi", "NewImage.tiff");
На этой странице более подробно объясняются различные способы выполнения системных вызовов.