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 %>
実行結果
<br />
uri (オリジナル)
URIエンコードを施す、URIフィルターと同様。
<% SET item = 'hoge=123&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;
