in reply to Cisco Telnet

No need to slurp the seed file, you can iterate over the lines. Make it a habit to use the three-argument form of open. As a rule of thumb, using lexical variables for you filehandles is better.
use strict; use Net::Telnet::Cisco; open my $log, '>', 'mylogfilepath' or die "Cannot writeopen log file: $!\n"; open my $seed, '<', 'myseedfilepath' or die "Cannot readopen seed file: $!\n"; while(<$seed>) { chomp; my $Telnet = Net::Telnet::Cisco->new(Host => $_); $Telnet->login(Name => 'user', Password => 'pass'); print $log "$ip\n", map $Telnet->cmd($_), 'show line 1', 'show lin +e 5'; }

Makeshifts last the longest.

Replies are listed 'Best First'.
Re: Re: Cisco Telnet
by CongoGrey (Sexton) on Feb 19, 2003 at 14:37 UTC
    Thanks for the input...but, I am not able to get the script to run properly I got this far:
    use strict; use Net::Telnet::Cisco; open my $log, '>', 'logfilepath' or die "Cannnot open log file : $!\n" +; open my $seed, '+<', 'seedfilepath' or die "Cannot open file : $!\n"; while($seed) { chomp $seed; my $Telnet = Net::Telnet::Cisco->new(Host => $_ or die "Cannot ope +n session to '$seed': $!\n"); $Telnet->login(Name => 'rschuman', Password => 'tagheuer1') or die + "Cannot log into device '$_': $!\n"; print $log "$_\n", map $Telnet->cmd($_), 'show line aux 0'; }
    I get the following error: Useless use of a constant in void context at C:\Documents and Settings\rschuman\ Desktop\telnet2.pl line 24. Cannot open session to 'GLOB(0x1abf15c)': I also realized that the original script's output was to much so i added a grep of the output:
    use strict; use Net::Telnet::Cisco; # open (LOGFILE, '>logfilepath') or die "Cannnot open log file : $!\n"; # open (SEEDFILE, 'seedfilepath') or die "Cannot open file : $!\n"; my @iplist = <SEEDFILE>; foreach my $ip (@iplist) { select LOGFILE; print "$ip\n"; my $Telnet = Net::Telnet::Cisco->new(Host => $ip) or die "Cannot o +pen session to '$ip': $!\n"; $Telnet->login(Name => 'user', Password => 'pass') or die "Cannot +log into device '$ip': $!\n"; my $output = $Telnet->cmd('show line aux 0'); my $matchlines = grep (/Modem hardware state:/, $output); print "$matchlines\n"; } close LOGFILE; close SEEDFILE;
    I also get the following error even though the script does run: Argument "" isn't numeric in numeric gt (>) at C:/Perl/site/lib/Net/Telnet.pm li ne 2569, <SEEDFILE> line 3.
      In the first script you forgot to actually use the filehandle to read from it: it must be while(<$seed>) - note the angle brackets. Also, you misplaced a paren two lines later - it must be
      my $Telnet = Net::Telnet::Cisco->new(Host => $_) or die "Cannot open session to '$seed': $!\n";

      Makeshifts last the longest.

        Aristotle, I appreciate you help on this and i want to have as clean a script a possible. Here is my latest version:
        use strict; use Net::Telnet::Cisco; open my $log, '>', 'logfile' or die "Cannnot open log file : $!\n"; open my $seed, '<', 'seedfile' or die "Cannot open seed file : $!\n"; while(<$seed>) { chomp; my $Telnet = Net::Telnet::Cisco->new(Host => $_) or die "Cannot op +en session to '$seed': $!\n"; $Telnet->login(Name => 'user', Password => 'pass') or die "Cannot +log into device '$_': $!\n"; print $log "$_\n", map $Telnet->cmd($_), 'show line aux 0'; }
        I get the following error: Argument "" isn't numeric in numeric gt (>) at C:/Perl/site/lib/Net/Telnet.pm li ne 2569, <$seed> line 1. Modification of a read-only value attempted at C:/Perl/site/lib/Net/Telnet/Cisco .pm line 751, <$seed> line 1. I can't seem to figure out where Perl thinks i am trying to modify the varible from the filehandle.