http://www.perlmonks.org?node_id=989643


in reply to Re^3: NET::OpenSSH to execute multiple commands
in thread NET::OpenSSH to execute multiple commands

($Core) = &connect( $Core, $user, $pass ); @Output = $Core->capture( "show ip route $IPNumber" ) or die( ($! >> 8) ); $DEBUG && Debug_Output( @Output ); ($Core2) = &connect( $Core2, $user, $pass ); @Output2 = $Core2->capture( "show run | include hostname" ) or die( ($! >> 8) ); $DEBUG && Debug_Output( @Output2 ); foreach $Line ( @Output, @Output2) { if ( $Line =~ m/^Routing entry for / ) { @Data = split( ' ', $Line ); $Subnet = $Data[ 3 ] ; } if ( $Line2 =~ m/^hostname / ) { @Data2 = split( ' ', $Line2 ); $Rname = $Data2[ 2 ] ; last ; } } @Subnet = split( /\./, $Subnet ); $RouterIP = join( '.', $Subnet[0], $Subnet[1], $Subnet[2], '1' ); print( " Router: [$Rname]\t Router IP: [$RouterIP]\n" );

The loop doesn't featch my Output2 array elements. This is what I get in the command line:

bash-3.00$./test.pl 10.10.10.16 Router: [] Router IP: [10.10.10.1]

Replies are listed 'Best First'.
Re^5: NET::OpenSSH to execute multiple commands
by Kenosis (Priest) on Aug 25, 2012 at 02:32 UTC

    Try changing $Line2 to $Line in the following:

    if ( $Line2 =~ m/^hostname / ) { @Data2 = split( ' ', $Line2 ); $Rname = $Data2[ 2 ] ; last ; }