VMethods

Scalar

defined

値が定義済みかどうかを判定します。

<% SET var = 0 %>
if defined 0 ... <% IF var.defined %>true<% ELSE %>false<% END %>
if 0 ... <% IF var %>true<% ELSE %>false<% END %>
<% SET var = '' %>
if defined '' ... <% IF var.defined %>true<% ELSE %>false<% END %>
if '' ... <% IF var %>true<% ELSE %>false<% END %>

実行結果

if defined 0 ... true
if 0 ... false

if defined '' ... true
if '' ... false

length

文字列長を計算する、マルチバイトには対応していない為日本語を使う場合は別途 Template::Like::Plugin::Unicode::Japanese をご利用下さい。

<% SET var = 'abc' %>
<% var.length %>

実行結果

3

日本語(UTF-8)

<% SET var = 'あ' %>
<% var.length %>

実行結果

2

repeat(n)

文字列を繰り返します。

<% SET var = '-' %>
<% var.repeat(30) %>

実行結果

------------------------------

replace(search, replace)

文字列を置換します。searchはエスケープせずに使う為、\wや.*が利用できます。
正規表現のオプションは g です、他のものを指定する場合は Template::Like::Plugin::Replace をご利用下さい。

<% SET var = 'get_element_by_id' %>
<% var.replace('_([a-z])', '-$1') %>

実行結果

get-element-by-id

remove(pattern)

文字列を削除します。patternはエスケープせずに使う為、\wや.*が利用できます。

<% SET var = 'get_element_by_id' %>
<% var.remove('_') %>

実行結果

getelementbyid

match(pattern, global)

文字列を検索し、適合部分を返します。
globalに真を指定すると正規表現評価時gオプションを利用します。
@ret = $text=~/$pattern/g

<% SET var = 'tanaka: 1-1, suzuki: 1-2' %>
example1
<% var.match('\w+', 1).join("\n") %>

example2
<% var.match('(\w+): (\d+)') %>

実行結果

example1
tanaka
1
1
suzuki
2
2

example2
tanaka
1
1
suzuki
2
2

search

文字列を検索し、マッチするかどうか真偽値を返す。
真偽値といっても 1空文字 なので注意。

<% SET var = 'tanaka: 1-1, suzuki: 1-2' %>
example1
<% IF var.search('\w+') %>
TRUE
<% ELSE %>
FALSE
<% END %>

example2
<% var.search('\w+') ? 'true' : 'false' %>

実行結果

example1

TRUE


example2
true

split

文字列を分割しリストリファレンスを返す。
区切り文字列には正規表現を用いる事ができる。

<% SET var = 'var1,var2,var3:var4:var5' %>
example1
<% FOREACH part IN var.split(',') %>
<% part %>
<% END %>

example2
<% var.split('[,:]').join('-') %>

実行結果

example1

var1

var2

var3:var4:var5


example2
var1-var2-var3-var4-var5

list

要素が1つのリストリファレンスに変換する
配列にも同様に list メソッドがあり、これは自らをそのまま返す
チェックボックスの値を参照する場合等、配列/スカラーの違いを吸収できる。

<input type="checkbox" name="choice" value="food" />
<input type="checkbox" name="choice" value="book" />
<input type="checkbox" name="choice" value="machine" />
example1
<% SET choice = ['food','book'] %>
<% choice.list.join(', ') %>

example2
<% SET choice = 'machine' %>
<% choice.list.join(', ') %>

実行結果

<input type="checkbox" name="choice" value="food" />
<input type="checkbox" name="choice" value="book" />
<input type="checkbox" name="choice" value="machine" />
example1

food, book

example2

machine

hash

文字列を1組のハッシュリファレンスに変換する、
用途は...。

<% SET choice = 'food' %>
example1
<% choice.hash.value %>

実行結果

example1
food

size

必ず 1 を返す。リストリファレンスは配列数を返す為、
要素数を表示したい場合等 list と一緒に使う。

<% SET item = ['food','book'] %>
example1
Size: <% item.size %>
List: <% item.list.join(', ') %>

<% SET item = 'machine' %>
example2
Size: <% item.size %>
List: <% item.list.join(', ') %>

実行結果

example1
Size: 2
List: food, book


example2
Size: 1
List: machine

substr

文字列を切り出す。

<% SET item = 'machine' %>
<% item.substr(1,3) %>

実行結果

ach

html (オリジナル)

htmlエスケープを施す、htmlフィルターと同様。

<% SET item = '<br />' %>
<% item.html %>

実行結果

&lt;br /&gt;

uri (オリジナル)

URIエンコードを施す、URIフィルターと同様。

<% SET item = 'hoge=123&amp;foo=45' %>
<% item.uri %>

実行結果

hoge%3d123%26amp%3bfoo%3d45

comma (オリジナル)

カンマ区切り(標準3桁)を行う。
桁数を指定する事も可能、commaフィルター (オリジナル) と同様。

<% SET item = '10000' %>
<% item.comma %>
<% item.comma(4) %>
<% item | comma %>
<% item | comma(4) %>

実行結果

10,000
1,0000
10,000
1,0000

Array

first

リストリファレンスから先頭の値を参照する
参照後の配列数は変化しない。

last

リストリファレンスから後尾の値を参照する
参照後の配列数は変化しない。

size

配列数を返す。

max

最後の添え字を返す、配列数 - 1 に等しい。

reverse

逆順のリストリファレンスを返す、
参照後の配列は変化しない。

join

指定された文字で配列を結合する。

grep

指定された値を含む要素だけを抽出する。
正規表現を指定可能。
要素は文字列を前提としている為オブジェクトの配列には使えない。

sort

keyを指定した場合、ハッシュの配列とみなし、そのkeyの参照値でソートする。
keyを指定しなかった場合、文字列の配列とみなし、ソートする。
いずれも比較演算子には cmp を用いる。
数値としてソートしたい場合はnsortを用いる。

nsort

keyを指定した場合、ハッシュの配列とみなし、そのkeyの参照値でソートする。
keyを指定しなかった場合、文字列の配列とみなし、ソートする。
いずれも比較演算子には <=> を用いる。
文字列としてソートしたい場合はsortを用いる。

unshift

配列の先頭に要素を追加する

push

配列の後尾に要素を追加する

shift

配列の先頭に要素を取り出す

pop

配列の先頭から要素を取り出す

unique

ユニークな要素だけを抽出する、
要素は文字列を前提としている為リファレンスのリストには使えない。

merge

配列を追加する、複数のリストリファレンスを指定した場合、
1つずつ展開しながら連結する。

slice

指定範囲の要素をリストリファレンスとして取り出す。

splice

offset, length, list を指定し、要素を切り出す。
listが指定されている場合、該当範囲をlistで置き換える。

list

何もせずそのままのリストリファレンスを返す。

Hash

keys

keysを返す。

処理イメージ

return keys %{ $val };

values

valuesを返す。

処理イメージ

return values %{ $val };

each

eachを返す。

処理イメージ

return each %{ $val };

defined

指定した key に定義値があるかを確認する。

処理イメージ

return defined $val->{$key};

exists

指定した key に値があるかを確認する。

処理イメージ

return exists $val->{$key};

size

組数を返す。

処理イメージ

return scalar( keys %{ $val } );

item

指定した key に対応する要素を返す。

処理イメージ

return $val->{$key};

list

タイプを指定した場合、
keys ... .keysと完全に同じ。
values ... .valuesと完全に同じ。
each ... .eachと完全に同じ。

指定しなかった場合、全ての key と val の組でハッシュを作り、
組全てをリスト化したものを返す。
※これは複雑なので処理イメージを参照して下さい。
処理イメージ(指定値無し)

my @list;
while ( my ( $key, $val ) = CORE::each(%{ $val }) ) {
  push @list, { key => $key, value => $val };
}
return \@list;