lamp has asked for the wisdom of the Perl Monks concerning the following question:

Dear monks,

I am writing a script to check the installed perl modules and its versions in different remote systems. I am using 'Net::SSH::Expect' module for executing the command in remote systems. The following is the sample code.
#!/usr/bin/perl use Net::SSH::Expect; my $host = "testserver"; my $user = "test"; my $password = "pass"; my $ssh = Net::SSH::Expect->new ( host => $host, password=> $password, user => $user, raw_pty => 1, timeout => 10 ); my $login_output = $ssh->login(); my $cmd = qq(perl -e 'use ExtUtils::Installed; my ($inst) = ExtUtils:: +Installed->new(); my (@modules) = $inst->modules(); map { print $_ . +":" . $inst->version($_) ."\n"; }@modules;'); my $res = $ssh->exec($cmd); print($res); $ssh->close();
While executing the command, i'm getting the following error
>new(); my () = ->modules(); map { print . ":" . ->version() ." > "; };' Can't declare stub in "my" at -e line 1, near ") =" syntax error at -e line 1, near "= ->modules" syntax error at -e line 1, near ". ->version" syntax error at -e line 2, near "};" (Might be a runaway multi-line "" string starting on line 1) Execution of -e aborted due to compilation errors.
If I execute the command manually in remote server using SSH client, i'm getting the output.

Can someone throw some light on this.

-lamp

Replies are listed 'Best First'.
Re: Error while executing a command using Net::SSH::Expect
by Corion (Patriarch) on Sep 09, 2008 at 08:01 UTC

    Debug your program by printing $cmd before you send it for execution to the remote machine. See perlop on how double-quotes (and qq{}) work.

    If you had use strict; at the top of your program, Perl would have told you what goes wrong. If you had -w on the Perl command line or use warnings; at the top of your program, Perl would have given you hints at what goes wrong.