Masteries

技術的なことや仕事に関することを書いていきます.

小ネタ: Perlのsplitの第3引数

超〜〜〜小ネタです. Perlにはsplitという関数がありまして, 次のように使えます:

my @list = split(/,/, "a,b,c"); # @list = ('a', 'b', 'c');

第1引数に正規表現を, 第2引数に文字列を渡すと, 第2引数の文字列を第1引数の正規表現にマッチした部分で分割してくれます.

で, 実はsplitには第3引数が渡せるのはご存知ですか? ご存知でしたら, このエントリで語りたいことの本題はそれなので, これ以上読み進める必要はありません(?).

さて, splitに第3引数を渡すと, 次のような挙動になります:

my @list = split(/,/, "a,b,c", 2); # @list = ('a', 'bc');

要するに, 第3引数で渡した数まで分割してくれる, という挙動をします.

なので, 例えば hogehoge.jpg といった文字列を hogehogejpg に分割したい, という時は, split(/\./, 'hogehoge.jpg') と書いてもいいのですが, split(/\./, 'hogehoge.jpg', 2) のように書いてあげると, 「2つに分割したいんだな」というのが明示できてお得かもしれません.

更に, 「分割した結果のうち, 片方しか必要ない」という場合は, 次のようにして受けるのが個人的には好みです:

# $basename = hogehoge となる
# jpg の部分は不要なので, undef で受ける
my ($basename, undef) = split(/\./, 'hogehoge.jpg', 2);

こうしておけば, 「splitで文字列を2つに分割したい」, 「分割した2つのうち, $basenameの部分(分割後の1つ目)だけ必要」ということを伝えられていいんじゃないかな, と思っています.

もっのすごい小ネタですが, まあたまにはこういうネタでもブログ書いてもいいじゃん, ということで...