Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

TCL - Substitution without evaluation - format, subst


The Tcl interpreter does only one Substitution pass during command evaluation. Some situations, such as placing the name of a variable in a variable, require two passes through the substitution phase. In this case, the substcommand is useful.
Subst performs a substitution pass without performing any execution of commands except those required for the substitution to occur, ie: commands within [] will be executed, and the results placed in the return string.
In the example code:
puts "[subst $$c]\n"
shows an example of placing a variable name in a variable, and evaluating through the indirection.
The format command can also be used to force some levels of substitution to occur.
subst ?-nobackslashes? ?-nocommands? ?-novariables? string
Passes string through the Tcl substitution phase, and returns the original string with the backslash sequences, commands and variables replaced by their equivalents.

If any of the -no... arguments are present, then that set of substitutions will not be done.
NOTE: subst does not honor braces or quotes.

Example


set a "alpha"

set b a


nd b with no substitution: $a $$b}
puts "a

puts {a
aand b with one pass of substitution: $a $$b"

$$b}]"
puts "a and b with subst in quotes: [subst "$

puts "a and b with subst in braces: [subst {$
aa $$b"]\n"

puts "format with no subst [format {$%s} $b]"

uts \"eval after format: [format {$%s} $b]\""

set

puts "format with subst: [subst [format {$%s} $b]]"
eval "
pnum 0;
set cmd "proc tempFileName {} "
set cmd [format "%s {global num; incr num;" $cmd]

eval $cmd

puts "[info body tempFileName]"

set a arrayname

set cmd [format {%s return "/tmp/TMP.%s.$num"} $cmd [pid] ]
set cmd [format "%s }" $cmd ]
set b index
set c newvalue


eval [format "set %s(%s) %s" $a $b $c]


name(index)"

puts "Index: $b of $a was set to: $arra
y


This post first appeared on VLSI WORLD, please read the originial post: here

Share the post

TCL - Substitution without evaluation - format, subst

×

Subscribe to Vlsi World

Get updates delivered right to your inbox!

Thank you for your subscription

×