超〜〜〜小ネタです. 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
といった文字列を hogehoge
と jpg
に分割したい, という時は, split(/\./, 'hogehoge.jpg')
と書いてもいいのですが, split(/\./, 'hogehoge.jpg', 2)
のように書いてあげると, 「2つに分割したいんだな」というのが明示できてお得かもしれません.
更に, 「分割した結果のうち, 片方しか必要ない」という場合は, 次のようにして受けるのが個人的には好みです:
# $basename = hogehoge となる # jpg の部分は不要なので, undef で受ける my ($basename, undef) = split(/\./, 'hogehoge.jpg', 2);
こうしておけば, 「split
で文字列を2つに分割したい」, 「分割した2つのうち, $basename
の部分(分割後の1つ目)だけ必要」ということを伝えられていいんじゃないかな, と思っています.
もっのすごい小ネタですが, まあたまにはこういうネタでもブログ書いてもいいじゃん, ということで...