でばぐめ -IT技術メモ- -3ページ目

でばぐめ -IT技術メモ-

主にハードウェア/ソフトウェアのプログラミングに関するブログです。

読みやすく、理解しやすく、保守しやすいプログラムを書くのは、意外と難しく感じます。

記述していくと自分流になりがちです。


Perlでは、作者のラリーのお勧めのスタイルがperlstyleで紹介されています。
perlstyle日本語版URL: http://perldoc.jp/docs/perl/5.8.0/perlstyle.pod


・"短い"1行ブロックではセミコロンを省略。
・ほとんどの演算子の前後にはスペース。
・カンマの後ろにはスペース。
・長い行は、演算子の後ろで改行する("and" と "or" を除く)

などなど。


"読みやすさ"については下の例が示されています。

open(FOO,$foo) || die "Can't open $foo: $!";

は、

die "Can't open $foo: $!" unless open(FOO,$foo);

より良いでしょう。


理由として、2つめでは、この文の主要部が修飾子に隠れてしまっているからです。
つまり、ファイルをopenするのが目的ということです。


関連書籍

プログラミング作法/ブライアン カーニハン
¥2,940
Amazon.co.jp

ほとんどC言語(一部C++,Java,Perl,Awk)で書かれていまするが、
内容は全プログラマ必見です。すばらしい書籍です。

序文より抜粋
執筆した目的は、プログラムに対する効果的な取り組み方を提示し、
質の高いコードを作成/維持するという目標をプログラマが達成するのを
多少なりとも支援することにある。
ベテランのプログラマなら自らの仕事に潜む問題点を認識できるだろうし、
比較的経験の浅いプログラマならほかの人々が苦労して得た教訓から
多くのことを学べるだろう。

前回の大文字と小文字の置換方法 だと、アポストロフィ( ' )を含む文字列では、

うまく置換されません。

$_ = "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を身につけたい人は
こちらをおすすめします。


逆スラッシュエスケープを使用し、大文字と小文字の変換を行います。


■後ろに続くものを強制的に変換

\Uエスケープは、その後ろに続くものを強制的に大文字にします。

\Lエスケープは、強制的に小文字にします。


"just do it"を大文字に変換し、その後小文字に変換する例です。


$_ = "just do it";
s/\b(\w+)/\U$1/g;   # $_は"JUST DO IT"になる
s/\b(\w+)/\L$1/g;   # $_は"just do it"になる



■1文字だけ変換

小文字のエスケープ\u, \l は次の1文字だけに作用します。

文字列内の"just"を変換する例です。


1文字だけ大文字に変換

$_ = "just do it";
s/(^\w+)/\u$1/g;   # $_は"Just do it"になる

1文字だけ小文字に変換


$_ = "JUST DO IT";
s/(^\w+)/\l$1/g;   # $_は"jUST DO IT"になる


■1文字目だけ大文字に変換

\u\Lを続けて指定すると、「すべてを小文字にせよ、ただし1文字目を大文字にせよ」

という意味になります。逆順に\L\uとしても同様です。


$_が "just do it" でも "JUST DO IT" でも "JuSt dO it" でも

$_は "Just Do it" になります。


s/\b(\w+)/\u\L$1/g;   # $_は"Just Do It"になる



初めてのPerl 第5版/Randal L. Schwartz

¥3,780
Amazon.co.jp
初心者にもわかりやすく書かれていますが、
全くの初心者というより、少しPerlに慣れてきた時に威力を発揮する本です。
簡単なテキスト操作のためにPerlを使用するのであれば十分事足ると思います。

プログラミングPerl〈VOLUME1〉/ラリー ウォール
¥5,565
Amazon.co.jp

ページ数も多く、価格もそれなりなので、Perlについて詳しく知りたい人向けです。
"初めてのPerl"と重複する箇所も多々あるので、これからがっちりPerlを身につけたい人は
こちらをおすすめします。