こんばんは、AzureStone(あーじゅ・すとーん)です。
明日(04/03)と明後日(04/04)は、用事で遠方に行ってきます。この記事を書き終えたら出発の準備をしようと思っている今日この頃です。
さて昨日(04/02)の記事では、「Googleで無闇矢鱈に関数を検索するよりもperldoc.jpで探せばちゃんと正しい情報が手に入りますよ!」と記しました。
その後、あることを考えていました。
今回は、1の部分のみに焦点を当てて記してみたいと思います。
毎度の事ですが、先に結論から言うと「石垣憲一さんが作成されたPod::PerldocJpをインストールして使えばよい」でしょうか。*1
本当は、「HAHAHA,俺の自作モジュールどうだ!!!」というアピールをしてみるのもよいと思ったのですが、その存在を知っていて作成するのと知らないで作成するのとは大違いです。
そもそも、「これからドキュメントを熟読して頑張るぜ!」なんて公言している人間が、この類の物を作るには限界があると思いました。はじめから諦めているのではなく、コードを書くためにコードを書くというなんだかよくわからないことになってしまいます。ですので今回は、秀作としての車輪の再発明から逃げました。
Pod::PerldocJpのソースコードを眺めれば*2その判断は、間違ってなかったように思います。興味ある方は、下記のURLからどうぞ。
さてその考えに至った経緯を説明していきましょう。本当は、説明としては上記までにとどめておく方が簡潔な文章として成立するのですが、後術する理由のために少し文章を追加しておきたいと思います。
おそらく下記にリストアップされた物のどれかを選択するのではないでしょうか?
私もPod::PerldocJpを知るまでは、そう考えていました。そしてやはりGoogleで検索してみると同じようなことを考えている方がいらっしゃるようです。
誤解の受けないように先に言っておくとこの方達が、何か悪いことをしているわけではないと私は思います。記事の日付をそのまま信用するとしたらPod::PerldocJpの方が、後発です。もしかしたらPod::PerldocJpの作者が参考にしたのかもしれません。あくまでも仮説です。
この記事を読んでいる方がいらっしゃってPod::PerldocJpをご存知ないのであれば、Pod::PerldocJpをインストールして使ってみませんか?その方が、時間の節約になります。自作しようとして時間を他の時間に使うことができますよ。
Ubuntu 9.10だと下記のように実行することでなんの問題なくインストールが完了しました。
sudo aptitude -y install g++ libssl-dev sudo cpan -i Bundle::CPAN sudo cpan -i Pod::PerldocJp
インストールが、完了したら、下記のようにしてみましょう。
perldocjp -h
そうすると下記のようなメッセージが出力されます。
azurestone@nsa01:~$ perldocjp -h perldoc [options] PageName|ModuleName|ProgramName... perldoc [options] -f BuiltinFunction perldoc [options] -q FAQRegex perldoc [options] -v PerlVariable オプション: -h このヘルプを表示する -V バージョンを表示する -r 再帰検索 (時間がかかります) -i 大文字小文字を無視する -t pod2manとnroffではなくpod2textを使って表示(デフォルト) -u 整形前のPODを表示する -m 指定したモジュールのコードも含めて表示する -n nroffのかわりを指定する -l モジュールのファイル名を表示する -F 引数はモジュール名ではなくファイル名である -D デバッグメッセージを表示する -T ページャを通さずに画面に出力する -d 保存するファイル名 -o 出力フォーマット名 -M フォーマット用のモジュール名(FormatterModuleNameToUse) -w フォーマット用のオプション:値(formatter_option:option_value) -L 国別コード。(あれば)翻訳を表示します -X あれば索引を利用する (pod.idxを探します) -J perldoc.jpの日本語訳も検索 -q perlfaq[1-9]の質問を検索 -f Perlの組み込み関数を検索 -v Perlの定義済み変数を検索 PageName|ModuleName... 表示したいドキュメント名です。「perlfunc」のようなページ名、 モジュール名(「Term::Info」または「Term/Info」)、「perldoc」 のようなプログラム名を指定できます。 BuiltinFunction Perlの関数名です。「perlfunc」からドキュメントを抽出します。 FAQRegex perlfaq[1-9]を検索して正規表現にマッチした質問を抽出します。 PERLDOC環境変数で指定したスイッチはコマンドライン引数の前に適用されます。 PODの索引には(あれば)ファイル名の一覧が(1行に1つ)含まれています。 [PerldocJp v0.06 based on Perldoc v3.15] azurestone@nsa01:~$
どうでしょうか?説明文を簡単に読むだけでもかなり高機能なだと感じませんか?
ちなみに私が作ろうとしていたものは、ここまで考えていませんでした。
さて、一度LANケーブル、emobile、WiFiなどのインターネットから隔離された状態で先日のlength()を検索してみます。
azurestone@nist01:~$ perldocjp -Jf length
length EXPR
length EXPR の値の *文字* の長さを返します。 EXPR が省略されたときには
、$_ の長さを返します。 これは配列やハッシュ全体に対してどれだ
けの要素を含んでいるかを 調べるためには使えません。 そのような
用途には、それぞれ "scalar @array" と "scalar keys %hash" を 利
用してください。
*文字* 関する注意: EXPR が Unicode の場合、バイト数ではなく、文
字の数が返ります。 内部文字列のバイト数が必要な場合は bytes を
参照して、 "do { use bytes; length(EXPR) }" を使ってください。
内部エンコーディングは様々なので、バイト数は普通は無意味です。
UTF-8 でエンコードされている場合の文字列のバイト数を得たい場合
は、 "length(Encoding::encode_utf8(EXPR))" を使ってください。
azurestone@nist01:~$
おっと失礼しました。あまりの感激で、、、つい。こんな感じで*3便利に使えます。
どうでしょう?少なくとも明日、岡山県に青春18切符で出かける私としては、かなり便利だと思います。
私が、ここまでPod::PerldocJpについて書いている主な理由は、初学者の方で英語を得意とされない方は、Pod::PerldocJpまで辿りつけるのだろうか?ということです。
何故ならば、僕もこの情報にたどり着くのに時間がかかったからです。見つけられたのも運が良かっただけではないかと思うくらいです。「モダンPerlの世界へようこそ」を執筆されている方のBlogを最新の物からロールバックするようにして記事を閲覧していたらたまたま、見つけました。
前回の記事で、紹介していました下記のサイトには、作者であるにも関わらずその記述がありません。最初、どうして宣伝していないのだろうかと考えていました。よく見たら、この記事のあとにリリースされたから、どうりで告知がないわけです。勿体無い・・・。*4
もっとどっかでドーンと出ていたらよかったのにと思いました。ですが、他力本願では状況が変わらないので誤解を受けないようにこの記事をかいておいたというわけです。
今回を後術する理由としては、関連キーワードで検索したらこの記事に辿りつけるようにとしたかったということを伝えたかっただけです。(;^_^A アセアセ…
さて、眠くなってきました。それとそろそろ明日の準備をする必要があるので今日は、これでおしまいです。次回は、Vim編です。
CGI & Perl ポケットリファレンス (Pocket reference)
http://d.hatena.ne.jp/ktat/20091219/1261159738