set sep [string repeat - 50] puts stderr $sep #display pipeline in alternative color proc pipeputs {pipeline} { puts stdout [a+ purple bold]$pipeline[a+] } set data1 d1 set data2 [list a b c] x/0.= list " item1 [list $data1] [list $data2] $data2 [pwd] " puts stdout "7 element list built with x/0.=list \" (multiline) \" syntax" puts stdout "x: $x" puts stdout "len: [llength $x]" puts stderr $sep puts stdout "Using linelist to restrict to the intended 5 elements" out.= = $x |> linelist puts stdout "out.= = \$x |> linelist" puts stdout "out: $out" puts stdout "len: [llength $out]" puts stderr $sep y.= list " {[set j aaa]} {$j etc} blah " puts stdout "y: $y" puts stderr $sep puts stdout "building a dict - with some impurities! (pwd)" puts stdout "Note that the commands in the dict-building string are resolved at pipeline construction time" puts stdout "To resolve commands at pipeline run-time, we can pass as arguments (see extrakey key), or put them in a script block in the pipeline (see runtimedir key)" puts stdout "Some alternatives not demonstrated here are to use 'subst' or compose pipelines" pipeset dictpipe result.= inputdict_with_args,k@keys,p@@k2/patchlevel,etc/@@k4/etc=* " k1 {dir {[pwd]}} k2 {patchlevel [info patchlevel]} k3 {something etc} k4 { hmmm well etc blah dir {[pwd]} } " |> finald,rtkey/@@runtimedir.= { #a very impure script block! set origdir [pwd] set parent [file dirname [pwd]] cd $parent dict set data runtimedir [pwd] cd $origdir set data } |@@k4/dir> <| extrakey [pwd] anotherkey foo puts stdout "dictpipe:" pipeputs $dictpipe {*}$dictpipe puts stdout "dict: $finald" #todo - a function to repack a nested dict into a flat structure (no linefeeds unless a leaf can't be interpreted as a dict)? # i.e - k4 is constructed as a string - but we may want to discard the stringrep and rebuild it as a pure list/dict puts stdout "keys: $k" puts stdout "k2/patchlevel: $p" puts stdout "k4/etc: $etc" puts stdout "runtimedir: $rtkey" puts stdout "result(k4/dir): $result" puts stderr $sep puts stdout "script block comment test (using multiple scripts in segment via implicit pipedata mechanism" pipeset commentpipe normallist.= rawlist/0.= { #a not terribly useful comment block #comments # etc #blah } {inspect -channel stderr -label inspect_no_data $data} {list \ { data over here etc } } { #more comments - but we need to pass the pipeline data through here - so 'set data' required at end. set data } |> string trim |> linelist |> .=>2 lmap v {string trim $v} pipeputs $commentpipe {*}$commentpipe puts stdout "rawlist:$rawlist" puts stdout "normallist:$normallist" puts stderr $sep pipeset pipe2 alt.= = $rawlist |> .=>1 lrange 0 end puts stdout "Alternative interpretation of list data" puts stdout "pipe2:" pipeputs $pipe2 {*}$pipe2 puts stdout "alt: $alt" pipeset pipe3 alt.= = $rawlist |> .=>* list puts stdout "Or.." puts stdout "pipe3:" pipeputs $pipe3 {*}$pipe3 puts stdout "alt: $alt" puts stdout -done-