2008-03-26から1日間の記事一覧

12.17 h2phでCの#includeファイルを変換する

% cd /usr/include; h2ph *.h */*.h

12.18 h2xsでCコードを含むモジュールを作成する

使用しているシステムに固有のC関数にPerlからアクセスしたい。 h2xsツールを使用する % perl Makefile.PL % make

12.15 警告をカスタマイズする

自分のモジュールにおいてレキシカルな警告に関する呼び出し側の設定を重視してそれに対応する処理を行いたいが、それらの設定を確認しようと思っても、前もって定義されている$^W変数の値を検査することができない。 use warnings::register;

12.16 パッケージを間接的に参照する

実行時にならないと名前のわからないパッケージに含まれている変数や関数を参照する必要がある。ただし、$packname::$varnameのような構文は不正である。 シンボリックリファレンスを使用する。 { no strict "refs"; $val = ${ $packname . "::" . $varname …

12.13 全てのパッケージの組み込み関数をオーバーライドする

現在のパッケージだけでなく、自分のプログラム全体に含まれている主要な組み込み関数の定義を変更する必要がある。 シンボルテーブルを直接操作することによって、CORE::GLOBALと言う疑似パッケージに関数を手動でインポートする。 *CORE::GLOBAL::int = \&…

12.14 組み込み関数と同様のエラーと警告を出力する

自分のモジュールでエラーと警告を生成する。しかし、warnまたはdieを使用すると、自分自身のモジュールのファイル名と行番号が出力される。ユーザのコードに基づいてメッセージが出力されるようにしたい。 標準モジュールCarpを使用する。 warn -> carp die…

12.12 組み込み関数をオーバーライドする

標準的な組み込み関数を独自のバージョンに置き換えたい。 該当する関数を別のモジュールから自分自身の名前空間にインポートする。 関数の定義 package Time::HiRes; use strict; require Exporter; use vars qw(@ISA, @EXPORT_OK); @ISA = qw(Exporter); @…

12.11 Autoloaderでモジュールのロードを高速化する

h2xsツールを使用して、必要なディレクトリと全てのファイルを作成する。 % h2xs -Xn Sample % cd Sample % perl Makefile.PL LIB=~/perllib % (Sample.pmを編集する。) % make install