test of Text::Template::Compact

制御タグのエスケープ

変数展開

forループ

evalperl

${%evalperl "0" v} ${%evalperl "$_->{loop}=[(1..10)]"} ${%for n in loop} ${%evalperl "$a+1" v v} ${v} ${%end}

error case: ${%evalperl "$_->{loop}=[(1..10]"}

blockdefine,blockpaste

${%blockdefine block1}
  • v=${v}
  • ${%end}

    フィルタ

    if-elsif-else-end

    ${%evalperl "1" th} ${%for v in varlist} ${%end}
    [${v}] ${%if defined v } defined ${%end}  ${%if not defined v } notdefined ${%end}  ${%if length v } length ${%end}  ${%if not length v } notlength ${%end}  ${%if bool v } bool ${%end}  ${%if not v } not ${%end}  ${%if nz v } ${%evalperl "$a+0" n v} ${n} ${%end}  ${%if v > th } >${th} ${%end} 

    ifc-elsifc-else-end

    ${%evalperl "1" th} ${%for v in varlist} ${%end}
    [${v}] ${%ifc "defined $a" v } defined ${%end}  ${%ifc "not defined $a" v } notdefined ${%end}  ${%ifc "length $a" v } length ${%end}  ${%ifc "not length $a" v } notlength ${%end}  ${%ifc "$a" v } bool ${%end}  ${%ifc "not $a" v } not ${%end}  ${%ifc "$a!=0" v } ${%evalperl "$a+0" n v} ${n} ${%end}  ${%ifc "$a>$b" v th } >${th} ${%end} 

    演算子

    ${%evalperl "0" v0} ${%evalperl "1" v1} ${%evalperl "2" v2} ${%evalperl "3" v3} ${%evalperl "[0,1,2,3]" va} ${%evalperl "[0,1,2,3]" $2 } ${%evalperl "{v2=>'hello',va=>[0,1,2,3]}" vh}
    ( a )
    $${1+(*3)} => ${ 1+(2*3)}
    $${(1+2)*3} => ${ (1+2)*3}
    $
    $ は パラメータ構造体を示すデータ参照式です。$の直後にキーワードや定数を書いた場合はそれは常に$[keyword]と解釈されます。
    たとえばdefined は演算子ですが、 $defined はパラメータ参照式として扱われます。
    使用例は次の項目を参照してください。
    a[b] メンバ/配列参照
    a.b メンバ参照
    a[b] はexprを評価した値を使ってハッシュ/配列のメンバを参照します。
    a.b は左右の項を連結してデータ参照パスを組み立てます。
    左項はデータ参照式である必要があります。
    a.bは、項がキーワードの場合はそのキーワードを連結します。
    a.bは、項がデータ参照式の場合はそのパスを連結します。
    a.bは、項がそれ以外の値の場合はその値を連結します。
    例: パラメータが次のようになっている場合、
    	{
    		v0=>0, v1=>1, v2=>2, v3=>3,
    		va=>[0,1,2,3],
    		2=>[0,1,2,3],
    		vh=>{v2=>'hello',va=>[0,1,2,3]},
    		defined=>'yes,defined',
    	}
    
    ${%evalperl "0" v0} ${%evalperl "1" v1} ${%evalperl "2" v2} ${%evalperl "3" v3} ${%evalperl "[0,1,2,3]" va} ${%evalperl "[0,1,2,3]" $2 } ${%evalperl "{v2=>'hello',va=>[0,1,2,3]}" vh} ${%evalperl "'yes,defined'" $defined} 以下の式は次のように展開されます。
    $${va[2]} => ${va[2]} # 数値で配列インデクスを指定
    $${va[-1]} => ${va[-1]} # マイナスの添字は配列の末尾から
    $${va[v2]} => ${va[v2]} # 別のデータ参照式の値で添字を指定
    $${vh["v2"]}=> ${vh["v2"]}# 左項がハッシュの場合も使えます
    $${vh.v2} => ${vh.v2}# 右項がキーワードの場合はそのキーワードを参照パスに連結します
    $${va.-1} => ${va.-1}
    $${va.(1+2)}=> ${va.(1+2)}
    # 値を参照パスに連結: 項が参照ではない値の場合
    $${vh."v2"}=> ${vh."v2"}# 値を参照パスに連結: 項が文字列定数の場合
    $${a.2 }=> ${va.2}# 値を参照パスに連結: 項が数値定数の場合
    $${va.v3} => ${va.v3}# 左項が配列だった場合、右項は数値コンテキストで解釈されます
    $${vh.(va.2)}=> ${vh.(va.2)}項が参照パスだった場合はパス同士をを連結します。用途は特にありませんが対称性のため。
    $${ $2.2}=> ${$2.2}$ を使った参照パスの例
    $${ $.2.2}=> ${$.2.2}$ を使った参照パスの例
    $${ $[2].2}=> ${$[2].2}$ を使った参照パスの例
    $${ $defined }=> ${ $defined }$ の直後では、予約キーワードは参照パスとして扱われます
    $${ $"defined" }=> ${ $"defined" }$ の直後では、定数は参照パスとして扱われます
    $${ $.defined }=> エラーになります '.' の右項は通常の式を書けるため、裸のdefinedは演算子として扱われます。
    ++a , --a , a++ , a--
    Cの単項インクリメント/デクリメント演算子と同じです。
    項はデータ参照式である必要があります。
    $${v=5} $${++v} $${++v} => ${v=5} ${++v} ${++v}
    $${v=5} $${--v} $${--v} => ${v=5} ${--v} ${--v}
    $${v=5} $${v++} $${v++} => ${v=5} ${v++} ${v++}
    $${v=5} $${v--} $${v--} => ${v=5} ${v--} ${v--}
    a**b
    perlのべき乗演算子と同じです。
    $${2**8} => ${2**8}
    !a , ~a , +a , -a
    単項演算子の論理否定、ビット否定、プラス、マイナスです。
    $${!1} $${!0} => ${!1} ${!0}
    $${~1} $${~0} => ${~1} ${~0}
    $${+1} $${+0} => ${+1} ${+0}
    $${-1} $${-0} => ${-1} ${-0}
    a*b , a/b , a%b , a repeat b
    乗除、商、 文字列の反復
    $${30 *7 }=> ${ 30 * 7}
    $${30 /7 }=> ${ 30 / 7}
    $${30 %7 }=> ${ 30 % 7}
    $${30 repeat 7} => ${ 30 repeat 7}
    a+b , a-b , a cat b
    加算、減算、 文字列の連結
    $${30 +7} => ${ 30 + 7}
    $${30 -7} => ${ 30 - 7}
    $${30 cat 7} => ${ 30 cat 7}
    << >>
    ビットシフト
    $${16 << 1} => ${ 16<<1 }
    $${16 >> 1} => ${ 16>>1 }
    int a,defined a , length a , bool a, nz a
    int は 数値の整数部分を返します。 ex: $${int 30/7} => ${ int 30/7}
    defined は 値が未定義なら0を、そうでないなら1を返します。
    length は 値が空文字列なら0を、そうでないなら1を返します。
    bool は 値がperl的に偽なら0を、そうでないなら1を返します。
    nz は 値が数値的に0なら0を、そうでないなら1を返します。
    defined等の条件演算の例はifの項を参照して下さい。
    < > <= >= lt gt le ge
    perlの比較演算子です。
    == != <=> eq ne cmp
    perlの比較演算子です。
    &
    ビットANDです。
    $${ 3 & 6 } => ${ 3 & 6 }
    | ^
    ビット or, xor です。
    $${ 3 | 6 } => ${ 3 | 6 }
    $${ 3 ^ 6 } => ${ 3 ^ 6 }
    &&
    論理ANDです。
    $${ 0 && 6 } => ${ 0 && 6 }
    $${ 1 && 6 } => ${ 1 && 6 }
    || //
    || は論理 or です。 a//b は defined($a)?$a:$b と等価です。
    $${ 0 || 6 } => ${ 0 || 6 }
    $${ 1 || 6 } => ${ 1 || 6 }
    $${ undef // 6 } => ${ undef // 6 }
    $${ 3 // 6 } => ${ 3 // 6 }
    a?b:c
    三項演算子です。
    $${ 0 ? "true" : "false" } => ${ 0 ? "true" : "false" }
    $${ 1 ? "true" : "false" } => ${ 1 ? "true" : "false" }
    ${%for v in varlist} ${%end}
    vv?"true":"false"v//"undef"v||"false"
    [${v}]${v?"true":"false"}[${v//"undef"}][${v||"false"}]
    = **= *= /= %= += -= <<= >>= &= |= ^= &&= ||= //=
    = は代入演算子です。
    それ以外の op= のような形をしているものは a = (a op b) と等価です。
    not a
    論理否定です。
    a and b
    論理積です。
    a or b , a xor b
    論理和と排他的論理和です。