07-03-2013 04:39 AM
I wrote a little EEM applet to extend CLI functionality to display BGP neighbor descriptions in "show ip bgp summary" command. The code is as follows:
event manager applet bgp_summary
event cli pattern "show ip bgp summary nice" mode "exec" enter
action 1.1 cli command "enable" action 1.2 cli command "show ip bgp summary" action 2.0 foreach line $_cli_result "\n" action 2.0.1 regexp "^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)(.*)" $line junk neighbor info action 2.0.2 if $_regexp_result eq 1 action 2.0.2.1 cli command "show ip bgp neighbors $neighbor | i Description:" action 2.0.2.2 regexp " Description: (.*)\r\n" $_cli_result junk txtdesc action 2.0.2.3 if $_regexp_result eq 1 action 2.0.2.4 puts "$txtdesc $info" action 2.0.2.5 else action 2.0.2.6 puts "$line" action 2.0.2.7 end ! ifelse action 2.1 else action 2.2 puts "$line" action 2.3 end action 2.4 end
It works without a problem, so I decided to try converting it to TCL policy using Joseph Clarke's tool (
http://www.marcuscom.com/convert_applet/). To my surprise "foreach" construct has been converted to multiple lines of code:
[...]
if {[regexp -indices "\n" $_ts _loc] == 0} {
set line $_ts
set _ts ""
} else {
set _mstart [lindex $_loc 0]
set _mend [lindex $_loc 1]
if {$_mstart == 0} {
set line ""
} else {
set line [string range $_ts 0 [expr $_mstart - 1]]
}
set _ts [string range $_ts [expr $_mend + 1] end]
}
[...]
Any ideas why this has happened? Is this preffered, more efficient way of spliting the list by a delimiter or not necessarily?
07-03-2013 08:37 AM
Just like Perl, there is more that one way to do something in Tcl. Since "foreach" in Tcl doesn't support the delimeter option, the conversion script had to do something to provide the same functionality. And since delimeter can be a string, using split is not good enough.
07-03-2013 01:44 PM
That makes perfect sense, I just didn't know that delimeter can be longer than one character. Thanks for prompt answer and very inspirational talk at Cisco Live! :-)
Discover and save your favorite ideas. Come back to expert answers, step-by-step guides, recent topics, and more.
New here? Get started with these tips. How to use Community New member guide