前回の大文字と小文字の置換方法 だと、アポストロフィ( ' )を含む文字列では、
うまく置換されません。
$_ = "don't do it";
s/\b(\w+)/\u\L$1/g; # $_は"Don'T Do It"になる
「ワード」とは、英文字、数字、下線を並べたもので、アポストロフィは含みません。
そのため、ワード境界アンカー\b はアポストロフィ前後を境界とみなしてしまいます。
\b によるワード境界マッチ
don ' t do it
↑ ↑ ↑ ↑↑ ↑↑ ↑
perlfaq4で下のような解決方法が提案されています。
■ 先頭のワードとスペース後のワードにマッチさせ、置換する
s/((^\w)|(\s\w))/\U$1/g;
■ ワードとアポストロフィを含む文字列にマッチさせ、置換する
s/([\w']+)/\u\L$1/g;
初めてのPerl 第5版/Randal L. Schwartz
- ¥3,780
- Amazon.co.jp
初心者にもわかりやすく書かれていますが、
全くの初心者というより、少しPerlに慣れてきた時に威力を発揮する本です。
簡単なテキスト操作のためにPerlを使用するのであれば十分事足ると思います。
- プログラミングPerl〈VOLUME1〉/ラリー ウォール
- ¥5,565
- Amazon.co.jp
ページ数も多く、価格もそれなりなので、Perlについて詳しく知りたい人向けです。
"初めてのPerl"と重複する箇所も多々あるので、これからがっちりPerlを身につけたい人は
こちらをおすすめします。