Perl Hackers Hub

第26回 Perlで困ったときの調べ方(1)

この記事を読むのに必要な時間:およそ 4 分

本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回のハッカーはcharsbarこと石垣憲一さんで,テーマは困ったときの調べ方です。

検索エンジンを頼りづらいPerl

Perlを使い始めて間もない人を悩ませる問題の一つに,複雑なデータ構造のデリファレンスや,配列・ハッシュのスライス,コンテキストを特定するための演算子,特殊変数など,各種の記号や括弧を駆使したPerl特有の書き方がGoogleなどの検索エンジンでは事実上検索できない,というものがあります。また,モジュールを使えば楽ができると知ってはいても,結局どのモジュールを使えばよいかよくわからない,というのもよく聞く悩みです。

本稿では,このようなPerlを使っていて困ったときの調べ方をおさらいします。

Perl特有の書き方を調べる

書籍の目次や索引から調べる

Perlコミュニティは総じて後方互換性を大事にしてきました。10年前に書かれたコードが今でも手直しなしで動くのは割にあたり前のことになっていますし,モジュールのインストールに必要な基本的なツール群については,10年前のPerlでも動くように書くことが一つの指針となっています。だから,基本的な文法事項のように流行に左右されない事柄を調べるのであれば10年前の書籍でも十分役に立ちますし,たとえばお手元に2巻組の『プログラミングPerl』注1があるなら,その67ページにも及ぶ充実した索引をあたればかなりのことが調べられます。

ただし,そもそも記号や括弧の羅列からデリファレンスだスライスだとわかるようなら苦労はしません。検索エンジンで調べてもわからないようなことは,索引を見てもそれとわからない可能性が高いものです。欲しい情報が見つからなくてもあまりがっかりしないでください。調べ方も一つではないのですから。

注1)
Larry Wall,Tom Christiansen,Jon Orwant著/近藤嘉雪訳『プログラミングPerl 第3版 VOLUME 1,2』オライリー・ジャパン,2002年

付属のドキュメントを調べる

Perlは,インターネットの黎明期(れいめいき)から多くの人に使われてきたという事情もあって,インターネットに常時接続できない人でも困らないよう,基本的なドキュメントはすべてPerlのソースコードとともに配布されてきました。Perlをインストールすると,これらのドキュメントも所定の位置にインストールされ,各種のビューアで閲覧できます。

ドキュメントの一覧は,perlというドキュメントにまとまっています。Perl付属のperldocコマンドで閲覧する場合は,次のようにします。

$ perldoc perl

この一覧には100件以上のドキュメントが並んでいますが注2)⁠もちろんそのすべてを読む必要はありません。おおまかな分類と,1行紹介がついていますので,必要そうなところのみ拾い読みすればよいでしょう。

文法や変数の使い方を調べる

Perlに慣れていない人がつまずきがちな内容は,主に次のドキュメントにまとまっています。

  • $,@,%,あるいは{,[の使い分けなどはperldataとperlref
  • 正規表現(/.../など)の詳細についてはperlre
  • サブルーチンの(特にやや高度な)使い方についてはperlsub
  • 日本語を始めとするマルチバイト文字の扱いについてはperlunicode

また,perlretut,perlreftutなど,tutで終わるものは初心者向けのチュートリアルになっています。基本的な使い方はこちらで確認してもよいでしょう。

関数の引数や戻り値,特殊変数の用法については,それぞれ次のコマンドを使うことでドキュメントの該当するセクションを簡単に取り出すことができます。

$ perldoc -f sprintf 関数名
$ perldoc -v $/ 変数名

ほかにも必要に応じて目を通しておきたいドキュメントはありますが,そもそもプログラミング自体に不慣れで一から順に勉強したい場合は,⁠初めてのPerl』注3など,国内外で定評のある入門書を先に読んでおくことをお勧めします。

Perlの最新事情を調べる

Perlがいかに後方互換性を大事にしているといっても,やはりリリースのたびに細かなバグは修正されていますし,新しい機能が追加されることも,場合によっては古い機能が廃止されることもあります。

インストールされているPerlの最新事情を確認したいときはperldeltaというドキュメントを参照してください。前のバージョンから何がどう変わったか,テーマごとに重要な変更点がまとめられています。

$ perldoc perldelta

また,過去の特定のバージョンの変更点を知りたい場合は,perldeltaの代わりにperl5100deltaなど,バージョン番号を含めたドキュメントを指定すると,そのバージョンと,その1つ前のバージョンの違いを一覧できます。

なお,これはあくまでインストールされているPerlの最新事情なので,Perl自体が古い場合はその後非推奨となった機能や書き方が紹介されていることもあります。本当に最新の情報を知りたい場合は,後述するようにPerl自体のバージョンを上げるか,CPANの検索サイトなどの情報を確認してください。

モジュールの書き方を調べる

外部に公開するかどうかはともかく,1つの案件の枠を超えて再利用可能なコードはモジュールの形にまとめ,古い案件のコードからコピー&ペーストを繰り返さないようにしたいものです。

Perlのドキュメントにはコードの書き方,モジュールの書き方についてまとめたものがいくつかあります。細かな点については流行り廃り(はやりすたり)が激しく,人によって意見が割れることも多いのですが,大原則については次のドキュメントが参考になります。

  • perlmodstyle
  • perlstyle

また,広く一般に公開するモジュールについては移植性の問題も考慮しておいたほうがよいでしょう。特にWindows環境ではパスの区切り文字やファイルのパーミッションがよく問題になります。詳しくはperlportというドキュメントをご覧ください。

Perlの拡張法を調べる

Perlのモジュールの中には,全体の1割ほどですが,Cで書かれた外部ライブラリを利用したり,PerlのC APIを使って処理を高速化しているものがあります。このようなモジュールを一から書く必要に迫られることはそう多くはありませんが,データベース処理や,HTML/XMLのパーサ,各種シリアライザ,暗号化や文字コードの処理など,この手のモジュールには業務上不可欠なものが多いので,概要くらいは調べる必要が出てくるかもしれません。

Cの外部ライブラリを利用するモジュールを読み書きする際は,次のドキュメントが役に立ちます。

  • perlxs
  • perlxstypemap

PerlのC APIの使い方については次の3つが参考になります。また,余裕があればPerlのソースコード(特にsv.c)を読んでみるのも有益です。

  • perlguts
  • perlcall
  • perlapi
注2)
執筆時の2014年3月現在,最新の開発版であるPerl 5.19.10には186のドキュメントが付属しています。
注3)
Randal L. Schwartz,brian d foy,Tom Phoenix著/近藤嘉雪訳『初めてのPerl 第6版』オライリー・ジャパン,2012年

著者プロフィール

石垣憲一(いしがきけんいち)

翻訳家兼プログラマ。歴史ネタ担当。最近は主にCPANツールチェーン界隈の片隅で活動中。

URL:http://d.hatena.ne.jp/charsbar/

コメント

コメントの記入