The minimized script below is my first try at using Net::Telnet's waitfor() to automate password updates on CatOS LAN switches that do interactive prompting.   It passes #!/bin/perl -wc but when run without the "-c" the following error results: Can't call method "waitfor" without a package or object reference at line 30 which is the first line containing a "waitfor()".   In case it matters - Perl 5.00503 on Debian 2.2r2.

I started with an example from Network Programming with Perl and a chunk from (code)) Cisco Pass Mass - IOS (deprecated by node 123464).   Super Search turned up a thread where waitfor() is used, but it didn't help me understand how to apply the right syntax in my scriptlet.  

Mind you, I don't even pretend to grok OOP.   Can a OOP-literate monk help me to see the error of my ways?

P.S. I know the code is double-ugly, but my intent is just to figure out the "waitfor()" syntax.   After that, I'll clean it up big-time.
    cheers,
    Don
    striving for Perl Adept
    (it's pronounced "why-bick")

#!/usr/bin/perl -w # setpassCat.pl # February 26-27, 2001 use strict; use Net::Telnet::Cisco; use vars qw($before $match); my $target = ''; my $oldpass = ''; my $olden = ''; my $newpass = ''; umask oct 177; my $cs = Net::Telnet::Cisco->new( host=>"$target", errmode=>'return', timeout=>'30', input_log=>'ciscoconf.log',) or die " Error connecting to $target\n"; $cs->login('',$oldpass) or die " Error logging in to $target. Bad pa +ssword?\n"; print " ", $cs -> last_prompt, "\n"; &PAUSE(); $cs->enable($olden) or die " Error getting $target privilaged mode.\n +"; print " ", $cs -> last_prompt, "\n"; &PAUSE(); my $telnet = $cs -> print('set pass') or die "Error giving \"set pass\ +" command.\n"; ($before,$match) = $telnet -> waitfor('Enter old password:') or die "E +rror getting \"Enter old password\" prompt\n"; print " ", $cs -> last_prompt, "\n"; &PAUSE(); my $output = $cs -> print("$oldpass") or die "Error giving existing ac +cess password.\n"; ($before,$match) = $telnet -> waitfor('Enter new password:') or die "E +rror getting \"Enter new password\" prompt\n"; print " ", $cs -> last_prompt, "\n"; &PAUSE(); $output = $cs -> print("$newpass") or die "Error giving new access pas +sword.\n"; ($before,$match) = $telnet -> waitfor('Retype new password:') or die " +Error getting \"Retype new password\" prompt\n"; print " ", $cs -> last_prompt, "\n"; &PAUSE(); $output = $cs -> print("$newpass") or die "Error confirming new access + password.\n"; ($before,$match) = $telnet -> waitfor('Password changed') or die "Erro +r getting \"Password changed\" confirmation.\n"; print " ", $cs -> last_prompt, "\n"; $cs->close; ###################################################################### +### sub PAUSE { print " <enter> to continue...\n"; my $continue = <STDIN>; } ###################################################################### +###

In reply to Net::Telnet and waitfor() by ybiC

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.