in reply to shell to perl equivalent

Just use the system command and backticks:

... system('scp', '/users/myuser/merc/rem_snew.pl', "$remoteuser\@$remotes +erver:/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', ...);

Of course, you can use a subroutine to factor out all the common arguments that are being used, but this is basically how you would do it.

Update: there really should be a multi-argument form of the backtick operator. One could be created using IPC::Open2, but there really should be one that's readily available. Is there one? Otherwise something like the following should be made into a module:

use IPC::Open2; sub backtick { my $pid = open2(my $rfh, undef, @_); my $buf; while (<$rfh>) { $buf .= $_; } close($rfh); waitpid $pid, 0; $buf; }

Replies are listed 'Best First'.
Re^2: shell to perl equivalent
by mercuryshipz (Acolyte) on Feb 18, 2008 at 19:41 UTC

    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.

      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.