You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

90 lines
2.6 KiB

package require punk
package require shellfilter
foreach d [debug names] {
#debug off $d
}
proc test1 {} {
alsoresult,data@@DATA.=\
result@1/1,returnvalue,status@0.=\
pipeswitch {
puts stderr "pre pipecase code always runs"
pipecase pipenomatchvar nomatch1 ,'p1v0'@0.= val {p1v0x b c} |> {
puts stdout "pipecase1 $data"
set data
}
# in between
puts stderr "code after unmatched but before matched will run"
pipecase pipenomatchvar nomatch2 input,'p2v1'@1.= val {x p2v1 z} |> {
puts stdout "pipecase2 $data"
return [list source pipecase2 data $data]
} |> {
string toupper $data
}
pipecase ,'p3v3'@2.= val {d e p3v3x} |> {
puts stdout "pipecase3 $data"
set data
}
puts stderr "no matches"
return nomatch
}
puts stdout "returnvalue of pipeswitch return is: $returnvalue"
puts stdout "[a+ yellow bold]nomatch var pipe1: $nomatch1[a+]"
puts stdout "nomatch destructured to 'matchinfo': [mi@@error/mismatch/matchinfo= $nomatch1]"
puts stdout "[a+ green bold]nomatch var pipe2 (empty if there was a match): $nomatch2[a+]"
puts stdout "value of pipeswitch result is: $result"
puts stdout "status of pipeswitch is: $status"
puts stdout "alsoresult:$alsoresult"
puts stdout "dict destructuring, DATA key = $data"
}
test1
puts stderr "proc test follows"
proc match_args {args} {
set arglist $args
procresult,'ok'@0.= pipeswitch {
puts stdout "----$arglist"
pipecase p1,'a'@0.= val $args |> string toupper |> {
puts stderr "p1 data:'$data'"
return [list source pipecase1 data $data]
}
pipecase p2,'x'@0,'y'@1.= val $args |> {
return [list source pipecase2 data $data]
}
pipecase p3,'x'@0.= val $args |> {
return [list source pipecase3 data [list transformed {*}$data]]
}
pipecase .= val $args {|
>} {
puts "catchall pipe4 $data"
return $data
}
} {*}$args
#scope is ok - but pipeswitch overrides'args' so we need to either pass them in, or set another variable - Review.
}
puts "match_args a b c : [match_args a b c]"
puts "match_args x y z : [match_args x y z]"
puts "match_args x Y z : [match_args x Y z]"
puts "match_args other blah : [match_args other blah]"