Этот код:
open my $tc, 'ssh -q $uid@$server "grep -c 'Error Occured' /home/perry/error.log-$LD8"'
Проблематично по ряду причин.Возможно, вы захотите заменить имена переменных $uid
, $server
и $LD8
содержимым этих переменных.Но строка использует одинарные кавычки - это то, что вы используете, когда вы не хотите, чтобы переменные были интерполированы.Кроме того, строка содержит одинарные кавычки, поэтому она, вероятно, вызывает синтаксическую ошибку.
Чтобы сделать ее более сложной, ваша строка также содержит символы двойных кавычек.Вы можете использовать обратную косую черту, как это:
open my $tc, "ssh -q $uid@$server \"grep -c 'Error Occured' /home/perry/error.log-$LD8\""
Или вы можете использовать оператор qq()
в качестве альтернативных двойных кавычек.
open my $tc, qq(ssh -q $uid@$server "grep -c 'Error Occured' /home/perry/error.log-$LD8")
Но проблема все еще существует, потому что эта строкаэто команда, но вы передаете ее open
, как если бы это было имя файла, поэтому она все равно не будет работать.Если вы хотите, чтобы open
обработал аргумент как команду и запустил его с его STDOUT, присоединенным к каналу, чтобы вы могли читать из канала, чтобы получить вывод команды, тогда вам нужно добавить символ канала (|
) как последний символ в строке:
open my $tc, qq(ssh -q $uid@$server "grep -c 'Error Occured' /home/perry/error.log-$LD8" |)