4引数substr
今日もPerlでプログラミング。正規表現で文字列の置き換えをしてました。
sub foo { my $r = shift; $r =~ s/^\^(.+)/^(?:\\[.+?\\]\\s*?)*?$1/; return qr/$r/; }
上みたいなコードを書いてたんだけど、よく考えたらこれ正規表現を持ち出すまでもないんだよね。文字列の途中にべつの文字列を差し込むだけだから左辺値substrでいいや。と考えたところで、ふと昨日読み終わったPerl Best Practicesを思い出す。確か左辺値substrは使わないようにって書いてなかったっけ。で、PBPを確認したらありました。
Substrings
Use 4-arg substr instead of lvalue substr.
Damian Conway先生いわく、「左辺値substrのかわりに4引数のsubstrを使いましょう」とのこと。というわけで4引数のsubstrを使って書き直し。
sub foo { my $r = shift; substr $r, 1, 0, '(?:\[.+?\]\s*?)*?'; return qr/$r/; }
これでいいかな。あと少し気になるのが、studyを使おうかどうしようか。まあ、これを考えるのは最後でもいいから今はいいや。