Script substitution

Difference between version 5 and 6 - Previous - Next
'''[Script] Substitution''' is the more apt term for [Dodekalogue%|%Command
Substitution], since entire scripts, not just individual commands, can be
contained in brackets.  The result of the script is the result of the final
command. A new stack frame is not created, so using `[return]` or `[break]`
or the like will cause the caller to return, etc. 


** Recursion **

[PYK] 2019-02-12:  Script substitution can be recursive.  Everything happens at
the same level, as no additional [level%|%levles] are created:

======
puts [
    set n 10
    set a {
        puts $n
        expr {[incr n -1]? [try $a] : {liftoff}}
    }
    try $a
]
======


** Comments **
[AMG] [PYK]: Script substitution can be used in combination with [list] and [{*}] to embed comments in lists.  The syntax is awkward, but it does work:

======
switch -regexp $input [list {*}[
# Handle words starting with a capital letter
] {^[A-Z]} {
    # Do the thing
    theThing
} {*}[
# Handle everything else
] default {
    # Don't do the thing
}]
======
Though also consider using [scripted list] or [decomment] for this same purpose.


** Long Strings **

[PYK] 2020-11-13:  Substitution of an empty script can be used break up long
strings in a script:

======
set url /path/to/some/[
    ]really/deep/resource
======


<<categories>> Syntax