in reply to Net::Telnet::Cisco and prompt regex issue

I tried this right after I posted and it seems to work:
Prompt => '/(?m:.*[\w.-]+\s?(?:\(config[^\)]*\))?\s?[\$#?>]\s?(?:\(ena +ble\))?\s*$)/'

Replies are listed 'Best First'.
Re^2: Net::Telnet::Cisco and prompt regex issue
by Anonymous Monk on Dec 09, 2010 at 08:43 UTC
    / (?m: # not capture, multiline .* # skip anything [\w\.-]+ # the 'device' name part \s? (?:\(config[^\)]*\))? # random '(config...)' part \s? [\$#?>] # real prompt end part \s? (?:\(enable\))? \s* # random '(enable)' part $) /x

    You're missing the '\' escape of the '.' in the device part. It's supposed to be a hostname like thing: foo-bar.baz10.com and needs to match a literal period '\.'.

    You also may need to set the timeout a bit longer depending on how long it takes to download.

    What you really want to do is know the device name in advance, or get it from the last-prompt after you login. Then replace the [\w\.-]+ part of the regex with the actual name of the device.

      You're missing the '\' escape of the '.'

      The dot isn't special inside of a character class, so no escaping required:

      $ perl -E 'say "matched" if "foo-bar.baz" =~ /^[\w.-]+\z/' matched $ perl -E 'say "matched" if "foo-bar:baz" =~ /^[\w.-]+\z/'

      The second case (with ':' in place of '.') doesn't match, because the (unescaped) dot in the pattern stands for a literal dot, not "any character" as it would outside of character classes.

        Looks like the problem had to do with the regex being slightly changed from the recommended Net::Telnet::Cisco prompt. The prompt should be changed from this:
        Prompt => '/(?m:.*[\w.-]+\s?(?:\(config[^\)]*\))?\s?[\$#>]\s?(?:\(enab +le\))?\s*$)/'
        To this:
        Prompt => '/(?m:^[\w.-]+\s?(?:\(config[^\)]*\))?\s?[\$#>]\s?(?:\(enabl +e\))?\s*$)/'
        The key difference being the ^ that marks the beginning of the line
Re^2: Net::Telnet::Cisco and prompt regex issue
by josh803316 (Beadle) on Dec 09, 2010 at 05:49 UTC
    I spoke too soon, that didn't solve it