ワンライナーのすすめ

この記事はPerl6 Advent Calendar 2011の20日目です。


残念ながら昨日の記事は落ちてしまいましたが、気にせず進めましょう。明日の記事を2本書けば問題無く25日まで進めますね!


ここまで私の担当では基本的な文法を紹介してきましたが、今回は少し趣向を変えて(ネタ切れとも言う)、標準ライブラリのStrクラスなどに付いて紹介してみようと思います。

Strクラスのメソッド

Perl6ではPerl5とは違い、文字列と数値は別のクラスで表現されています。標準のStrクラスだけでも簡単な文字列処理は問題無い程度にはメソッドが充実していますので、正規表現に頼らずとも文字列処理が行えます。これから紹介して行くメソッドを繋げていく事で、ワンライナーラクラク書ける様になると思います。

comb

@Zeppachiさんの記事でも紹介されていましたが、文字列を先頭から舐めていって、引数に与えたパターンにマッチした部分をリストにして返します。引数無しで呼んだ場合は、文字列を1文字ずつに分割したリストが返ります。ワンライナーで文字列処理する場合は、combで分割した文字列をmapに食わせるというやり方がとても有効です。

join

これは殆どPerl5のそれと同じで、文字列リストを順に結合していきます。引数に文字列を与えることで要素間にデリミタを挟む事も出来るので、CSVなどの単純な構造のデータを書き出す際には重宝するでしょう。

fmt

呼び出し元の文字列を、引数に与えたテンプレートに変換して返します。sprintfみたいなものですね。10進<->16進の基数変換を手抜きしたり、combで切り出した数字の桁をゼロ埋めで揃える時に便利です。

flip

文字列を逆順にして返します。

Listクラスなどのメソッド

combで刻んだ文字列のリストを上手く扱うためのメソッドを紹介します。

map

Perl5でもお馴染みのmapです。引数に与えたブロックを要素に対して実行して行き、その結果のリストを返します。

grep

同じくお馴染みのgrepです。引数に与えたブロックを要素に対して実行して行き、Trueを返したものを抜き出したリストを返します。

pick

リストの中から引数に与えた数の要素をランダムに抜き出します。Whatever(*)を引数に与えた場合は全ての要素をランダムに抜き出すので、結果としてリストをシャッフルした結果を返します。

reverse

リストを逆順にして返します。

まとめ

ここに挙げた以外にも、痒い所に手が届くようなメソッドがたくさんありますので、「こういうメソッド無いかなー」という時にはmethodsメタメソッドを参照してみるのも良いでしょう。それでは、快適なワンライナー生活を!