Проблема с вашим кодом в том, что команда system
не захватывает вывод для вас. Вы можете использовать qx//
:
use strict;
use warnings;
open my $fh, ">", "output.txt" or die $!;
my $oldfh= select $fh;
print qx/ls -a/;
select $oldfh;
close $fh or warn $!;
Существуют и другие опции для запуска внешнего приложения и получения его результатов, например, модули IPC::Open2
и IPC::Open3
. Они включены в perl по умолчанию.
Примечание: не используйте глобусы для файловых дескрипторов: они глобальные, а глобальные злые. Вместо этого используйте лексические переменные (FH
против $fh
). Кроме того, вы должны использовать три аргумента open
вместо двух параметров, так как первый безопаснее, чем второй.