perl: Subroutine question


 
Thread Tools Search this Thread
Top Forums Programming perl: Subroutine question
# 1  
Old 07-18-2011
perl: Subroutine question

Hi everyone,
I have given up finally trying to find a way to do this.
I have a subroutine called LoginFirst where I am starting a new SSH session.
I have bunch of subroutines, each one of them uses a (or I have to create
a new SSH constructor everytime) ssh connection to get some value so
what I did is use LoginFirst to first start a ssh and then re-use the handle
in all other subroutines but does not seem to be working, can someone please help.

Code:
sub LoginFirst {
    my $ssh = Net::SSH::Expect->new (
           host => $self->{ipaddr},
           password=> $self->{Password},
           user => $self->{UserName},
           raw_pty => 1,
           timeout => 10
    );
  return $ssh;
}

sub DeviceVersion {
      my $newssh = LoginFirst();
      my @commands = ("enable","show version");
      my $commands = join "\n", @commands;
      my $prout = $newssh->exec($commands);
      print " $prout\n";
}

# 2  
Old 07-18-2011
A quick demo of how to wrap the SSH::Expect object in a class of your own (seems to be what you were doing). You were missing the constructor so I added one, you called the LoginFirst routine with no object, whereas you depend on $self existing in it and you forgot to login Smilie
Code:
#!/usr/bin/perl

package  RunRemote;
use strict;
use warnings;

use Net::SSH::Expect;

sub new{
    my $proto=shift;
    my %args=@_;


    my $class = ref($proto) || $proto;
    my $self;
    $self->{ipaddr}    = defined $args{ipaddr}?$args{ipaddr}:"127.0.0.1";
    $self->{Password}  = $args{Password};
    $self->{UserName}  = defined $args{UserName}?$args{UserName}:$ENV{USER};
    bless ($self,$class);
    }

sub LoginFirst {
    my $self=shift;
    my $ssh = Net::SSH::Expect->new (
           host     => $self->{ipaddr},
           password => $self->{Password},
           user     => $self->{UserName},
           raw_pty  => 1,
           timeout  => 10
    );
  $ssh->login();
  return $ssh;
}

sub DeviceVersion {
     my $self=shift;
      my $newssh = $self->LoginFirst();
      #my @commands = ("enable","show version");
      my @ commands = @_;
      my $commands = join "\n", @commands;
      my $prout = $newssh->exec($commands);
      print " $prout\n";
}
1;
package Main;

my $connection=RunRemote->new(Password => "YOUR_PASSWORD");
my $response=$connection->DeviceVersion(("uname -a", "ls"));


Last edited by Skrynesaver; 07-18-2011 at 08:02 AM.. Reason: spelling and details
# 3  
Old 07-18-2011
Hi Skrynesaver,
Thanks so much, that worked like a charm...
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Perl subroutine returning different values in HPUX

HI , I am running a program on hpux in perl. I am encountering a strange issue where when i print a variable in the sub which is returning it , it prints a different value but when i call it and store value in a variable it gives a different o/p. the sub is sub CheckConfigFilePattern ... (4 Replies)
Discussion started by: Jcpratap
4 Replies

2. Shell Programming and Scripting

perl -Calling the Subroutine Only if the condition is met

Hello All, I am in the process of learning perl.I have a perl script and based on the arguments passed it would the appropriate subroutine that is defined in the script. Now, I need to check a value that is defined in the Environment variables and should call the subroutine only if the... (1 Reply)
Discussion started by: filter
1 Replies

3. Shell Programming and Scripting

Problem saving return value of subroutine in perl

Hi all, I have this code #This program read the triplets from file named "data" into #an array of array. use strict; use warnings; use Data::Dumper; use Graph; use Graph::Subgraph; my @S; while (<>) { push @S, ; } print "-----TRIPLETS-------\n"; print Dumper \@S; #Make... (6 Replies)
Discussion started by: rushadrena
6 Replies

4. Shell Programming and Scripting

perl - return an object from subroutine - Net::LDAP

Hi all, I'm not even sure a person can do this in perl, seems like you should be able to though. Here's the error IO::Socket::INET: connect: Operation now in progress at server_search.pl line 256, <DATA> line 466. Here's the perl code... sub ldap_new{ $nl = Net::LDAP->new( "$_" ) or... (3 Replies)
Discussion started by: jtollefson
3 Replies

5. Shell Programming and Scripting

Perl - pass file to subroutine

Hello All, I have 2 perl sub-routines. my $myDir = myDir_path; my $file; sub convert(){ system ("./$myConvertScript >> $myDir/$file_CONV" ); $file2 = $myDir/$file_CONV; } sub addDB(){ open(CONF, $config) or die "Cannot Open $config for reading. "; while(<CONF>){... (1 Reply)
Discussion started by: ad23
1 Replies

6. Shell Programming and Scripting

Calling perl subroutine from shell script (sh)

Hi, ive a perl script, where it has a subroutine clear() in it, and i've one shell script which runs in background, from that shell script i wanted to call subroutine which is in perl script, that's perl script is not module, just simple script. Eg: perl script <test> #!... (4 Replies)
Discussion started by: asarunkumar
4 Replies

7. Shell Programming and Scripting

Why Perl Subroutine Passed In Variable is 1?

The following subroutine prints 1 instead of the content of the Equipment variable. Can someone tell me why? #!c:/perl/bin/perl.exe # use strict 'vars'; my $Equipments = "data/equips.txt"; unless (open(EQUIP_FH, "$Equipments")) { print "errors: $Equipments\n"; # This line prints... (1 Reply)
Discussion started by: tqlam
1 Replies

8. UNIX for Dummies Questions & Answers

Help with Subroutine

Okay I have a 1TB drive that is almost completely full with vids. I am in the process of converting them to mp4. I have two scripts right now. One is a shell script to convert them with Handbrake. The other is a script to get a sort of progress report. To make things easier to understand, I will... (0 Replies)
Discussion started by: Dalton63841
0 Replies

9. Shell Programming and Scripting

calling perl subroutine from perl expect module

All, Is it possible to call a subroutine from the perl expect module after logging to a system that is within the same program. My situation is I need to run a logic inside a machine that I'm logging in using the expect module, the logic is also available in the same expect program. Thanks,... (5 Replies)
Discussion started by: arun_maffy
5 Replies

10. Shell Programming and Scripting

Help with a perl subroutine regex

Hi, I can't get this script ot work and I wa wondering if anyone could help? I need to open a file and use a subroutine to search each line for a regular expression. If it matches then I need to return a match from the subroutine and print the result? Any help would be greatly... (11 Replies)
Discussion started by: jmd2004
11 Replies
Login or Register to Ask a Question