Como você está editando o arquivo remoto no lugar, não é necessário capturar a saída, portanto system
seria preferível ao uso de backticks:
system 'ssh', '192.168.1.1', 'perl', '-pi.bup', '-e', 's/^(\s+?kernel)(.*)(?<!audit=1)$/$1$2 audit=1/', '/etc/grub.conf';
Note que você não precisa passar o comando remoto como um único parâmetro para o ssh. Isso ajuda a citar um pouco. Se você realmente quiser, você pode:
system 'ssh', '192.168.1.1', q{perl -pi.bup -e 's/^(\s+?kernel)(.*)(?<!audit=1)$/$1$2 audit=1/' /etc/grub.conf};
Usando o operador q{}
para permitir que o perl one-liner use aspas simples.
Eu faria isso, na verdade:
use Try::Tiny;
use IPC::System::Simple qw{capture};
sub SomeMethod
{
my $output = RemoteCommand(
$host,
q{perl -pi.bup -e 's/^(\s+?kernel)(.*)(?<!audit=1)$/$1$2 audit=1/' /etc/grub.conf}
);
}
sub RemoteCommand
{
my ($server, $command) = @_;
my $output;
try {
$output = capture('ssh', $server, $command);
}
catch {
LogMessage("command failed: ($command) : $_");
$output = $_;
};
return $output;
}