nDiki : h2xs
h2xs
C言語のヘッダファイルから Perl モジュール(のスケルトン)を生成するツール。 pure Perl なモジュールの作成時にも使用できる。
Pure Perl モジュールのスケルトンを作成する
Foo というモジュールを作成する場合、以下のコマンドを実行する。
h2xs -AX -n Foo
h2xs 1.23 (Perl v5.8.8 付属)の場合以下のようなファイルが作成される。
Foo/lib/Foo.pm Foo/Makefile.PL Foo/README Foo/t/Foo.t Foo/Changes Foo/MANIFEST
Pure Perl モジュールのスケルトンを作成する (オブジェクト指向インタフェース)
オブジェクト指向的なモジュールなどで、シンボルを export する必要がない場合は --skip-exporter オプションを指定しておくと、余計なコードがスエルトンに含まれないようになる。
h2xs -AX --skip-exporter Foo
古い Perl に対応した pure Perl モジュールのスケルトンを作成する
h2xs -AX -b 5.005.03 -n Foo
のように互換性を維持したいバージョンを -b オプションで指定することが可能である。 v5.6.0 より前を指定すると 'our' や 'use warnings' を使わないようなスケルトンを生成してくれる (h2xs 1.23)。
Pure Perl モジュールのスケルトンを作成する (ネストしたパッケージ名)
h2xs -AX -n Foo::Bar
とすると h2xs 1.23 の場合 Foo-Bar というディレクトリが作成され、その中にスケルトンが作成される (h2xs -AX -n Foo-Bar とはしない)。
Foo-Bar/lib/Foo/Bar.pm Foo-Bar/Makefile.PL Foo-Bar/README Foo-Bar/t/Foo-Bar.t Foo-Bar/Changes Foo-Bar/MANIFEST
*.pm を置く場所
h2xs -AX -b 5.005.03 -n Foo::Bar
として Foo::Bar モジュールのスケルトンを作成した場合、ソースディレクトリにある各 .pm は以下のようなモジュールであるとして扱われる (Makefile.PL があるディレクトリをカレントディレクトリとして)。
- ./Bar.pm -> Foo/Bar.pm ( $(INST_LIBDIR)/Bar.pm )
- ./A.pm -> Foo/A.pm ( $(INST_LIBDIR)/A.pm )
- ./Bar/B.pm -> Foo/Bar/B.pm ( $(INST_LIBDIR)/Bar/B.pm )
- ./lib/Foo/C.pm -> Foo/C.pm ( $(INST_LIB)/C.pm )
lib サブディレクトリに置く
配布アーカイブのトップディレクトリに *.pm を置きたくない場合は、lib サブディレクトリの下に置く(その際は Foo ディレクトリから作成する必要がある)。
Makefile.PL と同じ階層に置く
配布アーカイブのトップディレクトリに *.pm を置いてもよい場合は、Foo の下のモジュールは Makefile.PL と同じ場所に、Foo::Bar パッケージの下のモジュールは Barサブディレクトリを作成しそこに置く。
(PMLIBDIRS, BASEEXT, init_dirscan(), libscan(), 参照)
スポンサード リンク
Related term
インストール blib Perl テストスクリプトの書き方 File::Spec PPM::Make バージョン番号 Module::Install 標準 Perl ライブラリ Module::Build Template Toolkit CGI.pm SpeedyCGI EVAL_PERL ExtUtils::FakeConfig NEWS JSON CGI ChangeLog 正規表現 CPAN Test::Unit Term::ProgressBar PAR Perl でデータベース処理 Test::Class 5.005_03 SWF wxPerl IDNA::Punycode GUI
2004年10月16日 (土)
■ Template Toolkit のテンプレート上で対話的入力

ちょっとしたプログラムパッケージや LaTeX ドキュメントを作成する時に、Makefile やその他ファイルのスケルトンをまとめて生成する算段を検討中。 例えば Perl の h2xs のような感じ。
基本的には Template Toolkit ベースでいってみたい。 ttree あたりを使えばだいたいできそうだ。 ここで --define var=value で全て間違えずに指定するのは大変になってくるだろう。 ということでテンプレート変数定義をまとめたテンプレートファイルを作成し、各テンプレート処理をする際にプリプロセスするようにする。
でこのテンプレート変数定義のテンプレートファイルは対話的に作成できるようにしたい。 テンプレートファイルのテンプレートファイルを処理して。
で対話的入力の方法なのだが、探してもそのようなディレクティブもプラグインもみつからない。ありそうなもんだけどなぁ。
しょうがないので、PERL ディレクィブ内で Term::ReadLineを使って入力。 こんな感じ。
[% TAGS [- -] -%]
[- PERL -]
use Term::ReadLine;
my $term = new Term::ReadLine('template');
$stash->set('readline' => sub {
my $prompt = shift || 'input:';
my $text = $term->readline($prompt);
if (defined $text) {
$term->addhistory($text);
}
return $text;
});
[- END --]
[% project.name = '[- readline('project name:') -]' -%]
[% project.author = '[- readline('author:') -]' -%]
tpage でこのテンプレートファイルを処理すると、対話的に値を入力しながらテンプレートファイルを生成できる。 実際は文字列のエスケープなどもうちょっと工夫が必要。
ちなみに Debian GNU/Linux sid の libtemplate-perl は 2.10-1 で、このバージョンの Template Toolkit の tpage だと EVAL_PERL が有効になっておらずうまく動かない。 手元にコピーして Template オブジェクトの初期化部分に EVAL_PERL => 1 を追加する必要あり (2.14 の tpage は --eval_perl オプションで有効にできる)。
- Twitter ベイジアンフィルタプロキシ (2007-12-29)
- DBD::Oracle 1.16 を Debian GNU/Linux s... (2005-05-19)
- Twitter への書き込みを自動的に Skype ムードメッセージに設定する (2008-02-25)
- ColdSync (2004-05-05)
- sid の CinePaint がプラグイン読み込みでエラー (2006-04-15)
2004年10月17日 (日)
■ ExtUtils::ModuleMaker

Perl モジュールのスケルトンを生成するためのモジュール。 h2xs と同じ目的で使うもの。 modulemaker というスクリプトが付属していて、実行すると対話的に項目を設定した後、スケルトンを生成することができる。
h2xs よりはいろいろ項目を設定してスケルトンを生成できる。 h2xs よりは良いがカスタマイズはあまりできなさそう。
直接これを使うためというよりか、ExtUtils::ModuleMaker::TTを使ってみるためにインストール。
- ExtUtils::ModuleMaker::TT (2004-10-17)
- Plagger で Twitter のあれこれをメールで通知 (2008-12-25)
- WiKicker の Makefile.PL を Module::Inst... (2006-02-10)
- 今日のさえずり - くるぴかポッチャマ廻しにくい (2009-12-27)
- Perl モジュール Parse::Lex 2.10 をインストール (1999-08-18)
2006年12月15日 (金)
■ Perl スクリプトを PAR ファイルにして PAR リポジトリに登録する

PAR リポジトリから Perl モジュールをネットワーク配信するためには、以下の手順で PAR ファイルを作成する。
perl Makefile.PL make make test perl -MPAR::Dist -e blib_to_par
blib ディレクトリ以下のファイルもとに PAR ファイルが作成されるので、でき上がった PAR ファイルを リポジトリに登録すれば良い(PAR::Repository でビルド済み Perl モジュールをネットワーク配信)。
ではちょっとした Perl スクリプトを PAR リポジトリからロードして使えるようにするにはどうすればよいか。もちろん h2xs などで一式そろえ make して blib ツリーを作るようにすればいいが、たった 1 つのスクリプトファイルだけの時などは大袈裟だ。
この場合は pp でいける。
echo 'print "hello world!"' > myscript.pl pp -o myscript.par -p myscript.pl parrepo inject -r /tmp/PAR myscript.par -v 1.00 \ -a MSWin32-x86-multi-thread -p 5.8.8 \ --any-arch --any-version
スクリプトのメタデータがないので、parrepo に登録する際に明示的にオプションで指定してあげる必要がある。
- -v
- プログラムのバージョン番号
- -a
- アーキテクチャ
- -p
- Perl のバージョン
- --any-arch
- アーキテクチャ非依存で動くならば指定しておく
- --any-version
- 任意の Perl のバージョンで動くならば指定しておく。
PAR ファイル(にした Perl スクリプト)が --any-arch で --any-version であっても、-a と -p は必須だ (PAR::Repository の中にアーキテクチャ/バージョンつきで登録された上でシンボリックリンクの形で any 扱いにされるため)。
これで PAR リポジトリからスクリプトを実行できるようになる。 スクリプトの更新もリポジトリ側で行うだけで良くなる。
perl -e "use PAR { repository => 'http://www.example.com/PAR/',
run => 'myscript.pl'}"
お好みで実行形式ファイルにしておけば Perl をインストールすることなく実行できるようになるので便利。
pp -o myscript.exe -M PAR::Repository::Client \
-e "use PAR { repository => 'http://www.example.com/PAR/',
run => 'myscript.pl'}"
ちなみに PAR リポジトリを使わずに、直接 PAR ファイルを指定して実行できることもできる。
perl -e "use PAR { file => 'http://www.example.com/myscript.par', \
run => 'myscript.pl' }
ちょっとした用途ではこちらでも良いけれど、アーキテクチャ別の管理やらモジュールの管理やらを考えると PAR リポジトリを作ってしまった方が楽。
- PAR::Repository でビルド済み Perl モジュールをネット... (2006-12-12)
- 「依存関係検査のしにくいモジュール」に依存するスクリプトをPARで実行形式化する (2005-03-08)
- Module::Build でソースパッケージング (2005-08-24)
- Plagger で Twitter のあれこれをメールで通知 (2008-12-25)
- WiKicker の Makefile.PL を Module::Inst... (2006-02-10)
■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザイン ビックカメラProcess Time: 0.030282s / load averages: 0.22, 0.17, 0.11
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)




◇ Twitter やってます。この記事が気にいったらぜひ twitter.com/Naney の follower になってください。