Это не работает в вашем примере, потому что вы никогда не печатаете $r
.Вывод фиксируется в переменной $r
.Используя вместо этого system()
, вы можете видеть вывод, напечатанный в STDOUT, но затем вы не сможете использовать вывод, как вы (вероятно) ожидали.
Просто выполните:
print $r;
Обновление:Я изменил say
на print
, так как "echo" уже дает вам новую строку.
Чтобы экранировать метасимволы оболочки, как указано в комментариях, вы можете использовать quotemeta.
Вы также должны знать, что | more
не имеет никакого эффекта при захвате вывода из оболочки в переменную.Процесс просто: echo | more | $r
, и вы можете пропустить more
.