in reply to Re: shell to perl equivalent
in thread shell to perl equivalent


this is the pgm i wrote and i got the following errors..

#!/usr/bin/perl sub paranthesis{ my @paran = @_; system('scp', '/users/myuser/merc/rem_snew.pl', $remoteuser\@$remotese +rver:/users/$remoteuser/tmp/rem_snew2.pl"); my $result = `ssh $remoteuser\@$remoteserver perl /users/$remoteuser/t +mp/rem_snew2.pl`; print "$result\n"; system('ssh', "$remoteuser\@$remoteserver", 'rm', /users/$remoteuser/t +mp/rem_snew2.pl); } paranthesis(@paran);
Backslash found where operator expected at rum_rem_perll.pl line 7, ne +ar "$remoteuser\" (Missing operator before \?) Scalar found where operator expected at rum_rem_perll.pl line 7, near +"/users/$remoteuser" (Missing operator before $remoteuser?) String found where operator expected at rum_rem_perll.pl line 11, near + "print "" (Might be a runaway multi-line "" string starting on line 7) (Missing semicolon on previous line?) Scalar found where operator expected at rum_rem_perll.pl line 11, near + "print "$result" (Do you need to predeclare print?) Backslash found where operator expected at rum_rem_perll.pl line 11, n +ear "$result\" (Missing operator before \?) String found where operator expected at rum_rem_perll.pl line 12, near + "system('ssh', "" (Might be a runaway multi-line "" string starting on line 11) (Missing semicolon on previous line?) Scalar found where operator expected at rum_rem_perll.pl line 12, near + "system('ssh', "$remoteuser" Backslash found where operator expected at rum_rem_perll.pl line 12, n +ear "$remoteuser\" (Missing operator before \?) String found where operator expected at rum_rem_perll.pl line 12, at e +nd of line (Missing semicolon on previous line?) syntax error at rum_rem_perll.pl line 7, near "$remoteuser\" Can't find string terminator '"' anywhere before EOF at rum_rem_perll. +pl line 12.


thanks.

Replies are listed 'Best First'.
Re^3: shell to perl equivalent
by kyle (Abbot) on Feb 18, 2008 at 20:12 UTC

    You're missing quotes around some of your parameters.

    sub paranthesis { my @paran = @_; system( 'scp', '/users/myuser/merc/rem_snew.pl', "$remoteuser\@$remoteserver:/users/$remoteuser/tmp/rem_snew2.p +l" ); my $result = `ssh $remoteuser\@$remoteserver perl /users/$remoteuser/tmp/ +rem_snew2.pl`; print "$result\n"; system( 'ssh', "$remoteuser\@$remoteserver", 'rm', "/users/$remoteuser/tmp/rem_snew2.pl" ); } paranthesis(@paran);

    I see you using my, but this doesn't actually work under strict. That would be a goal worthy of your time, in my opinion.


      this is how i ran the program... but i am not able to suceed...
      #!/usr/bin/perl sub paranthesis { my @paran = @_; system( 'scp', '/users/myuser/merc/rem_snew.pl', "$remoteuser\@$remoteserver:/users/$remoteuser/tmp/rem_snew2.p +l" ); my $result = `ssh $remoteuser\@$remoteserver perl /users/$remoteuser/tmp/ +rem_snew2.pl`; print "$result\n"; system( 'ssh', "$remoteuser\@$remoteserver", 'rm', "/users/$remoteuser/tmp/rem_snew2.pl" ); } paranthesis(@paran);


      this is how i ran it...
      perl filename.pl remoteuser remoteserver


      this is the error i get

      ssh: : Hostname and service name not provided or found lost connection usage: ssh [-1246AaCfgkMNnqsTtVvXxY] [-b bind_address] [-c cipher_spec +] [-D port] [-e escape_char] [-F configfile] [-i identity_file] [-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p +port] [-R [bind_address:]port:host:hostport] [-S ctl_path] [user@]hostname [command] usage: ssh [-1246AaCfgkMNnqsTtVvXxY] [-b bind_address] [-c cipher_spec +] [-D port] [-e escape_char] [-F configfile] [-i identity_file] [-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p +port] [-R [bind_address:]port:host:hostport] [-S ctl_path] [user@]hostname [command]


      thanks.
        this is how i ran it...
        perl filename.pl remoteuser remoteserver

        The problem with your script is that you never use the command line args, and nothing is ever assigned to the variables "$remoteuser" and "$remoteserver". Do it like this (assuming that "remoteuser" is an alphanumeric string, and "remoteserver" is alphanumerics with periods):

        #!/usr/bin/perl die "Usage: $0 remoteuser remoteserver\n" unless ( @ARGV == 2 and $ARGV[0] =~ /^\w+$/ and $ARGV[1] =~ /^\w+( +\.\w+)*$/ ); paranthesis( @ARGV ); # This is important sub paranthesis { my ( $remoteuser, $remoteserver ) = @_; # equally important system( 'scp', '/users/myuser/merc/rem_snew.pl', "$remoteuser\@$remoteserver:/users/$remoteuser/tmp/rem_snew2.p +l" ); my $result = `ssh $remoteuser\@$remoteserver perl /users/$remoteuser/tmp/ +rem_snew2.pl`; print "$result\n"; system( 'ssh', "$remoteuser\@$remoteserver", 'rm', "/users/$remoteuser/tmp/rem_snew2.pl" ); }

        Also, you might want to try doing these other two commands first, before running the perl script:

        ping -c 2 remoteserver ssh remoteuser@remoteserver ls -d tmp
        If the ping fails, it means you are using a non-existent host name for "remoteserver"; if the ping succeeds but the ssh fails, it's either because your "remoteuser" name does not match an existing user name on that system, or because the home directory for that user account does not contain a subdirectory called "tmp".
        The arguments you pass on the command line are in the array @ARGV. Change the call of your paranthesis() sub to
        paranthesis(@ARGV);

        You should begin reading some perl manual pages, e.g. perl, perlsyn, perlrun...

        --shmem

        _($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                                      /\_¯/(q    /
        ----------------------------  \__(m.====·.(_("always off the crowd"))."·
        ");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}