他のプログラミング言語でPerlのサブルーチンを作成する。他のプログラミング言語でPerlのサブルーチンを作成する。}説明¶Inlineモジュールは他のプログラミング言語からのソースコードをPerlスクリプトやモジュールに直接"Inline"(=一緒)に入れることを可能にします。コードは自動的に必要に合わせてコンパイルされ、そしてPerlからすぐにアクセスするためにロードされます。InlineはXSやSWIGといった手段を使って、独自のつなぎのコードを書き、コンパイルするといった難しいことをしないで済むようにしてくれます。それが欲しいところでコードをタイプし、いつものようにPerlを実行してください。難しいことは全て、あなたの代わりに扱われます。あなたのコードのコンパイルとインストールはすべて透過的に行われます;あなたが分かることといえば、最初に実行したときにコンパイルによって遅くなることだけです。Inlineのコードは、あなたが最初に実行するとき(あるいはそれが変更されたとき)にだけコンパイルされます。そのためパフォーマンス上の問題は1度だけしか発生しません。(CPAN上のように)配布されるモジュールにInlineに入っているコードは、モジュールがインストールされるときコンパイルされるでしょう。そのためエンド・ユーザはコンパイル時間に気がつくことはないでしょう。Windowsの両方で同じように動くことです。サポート情報についてはInline-Supportをご覧ください。Inlineなの?¶"なぜPerlで他の言語を使わなければいけないのですか?"あるいは"そうするために、なぜInlineを使わなきゃいけないのですか?"ということを知りたいですか?その両方に答えてみようと思います。Perlで他の言語を使わなければいけないのですか?最も明確な理由はパフォーマンスです。インタープリトされる言語としては、Perlは非常に速いものです。多くの人々が"PerlにできることをCは速くできる"というでしょう。:-)、いずれにしても、他の言語を使うことにより、その言語であなたのプログラムを完全に書くことなく、あなたのPerlコードでのボトルネックを解消することができるかもしれません。これは、クリティカルではないコードのすべてにPerlを使うので、開発時間全体を低く抑えます。1つの理由は、その言語が使う既存のAPIからの機能にアクセスするためです。このコードは場合によっては、バイナリ形式でしか利用することができないかもしれません。ネイティブな言語で小さなサブルーチンを作ることにより、既存ライブラリとあなたのPerlとの"つなげる(=glue)"ことができます。CPANの利用者であれば、あなたはコードの再利用がよいことが分かるでしょう。それじゃあなぜFortranのライブラリを放っておくんですか?InlineをCと一緒に使うならば、Perl自身の内部の全てにアクセスすることができます。これは非常に強力な力と危険性の両方への門を開くことになります。理由は"そうしたいから!"でしょう。いろんなことがあるから世界は面白いんです。TMTOWTDI!そうするために、なぜInlineを使わなきゃいけないのですか?既に2つの有名な、CでPerlを格納するためのファシリティが存在します。両方とも、少なくともPerlに関しては、その特性は似通っています。両方ともInlineに比べると学習するのは非常に困難です。XS環境を設定し利用することの学習曲線は非常に鈍いものになります。ExtUtils::MakeMakerInlineではすぐにはじめて、実行することができます。Cookbookがあります。背後で行われる複雑な構築プロセスについて学習する必要はありません。あなた自身でコードをコンパイルする必要すらありません。Cのコードを書くこと以外は、Inlineがすべての面倒を見てくれます。Perlプログラマはコンパイルのような馬鹿げたことで悩まされることはありません。Run"(=ちょっとイジって実行、ちょっとイジって実行)が私たちのやり方です。面白くない仕事は全て、Inlineがあなたに代わってやってくれます。Inlineのもう1つの利点は、スクリプトで直接使うことが出来ることです。Perlのワンライナーでそれをつかうこともできます。XSやSWIGでは、常に完全に別のモジュールを設定します。1つあるいは2つの関数しか持っていなくても。Inlineは簡単なことは簡単に、難しいことも可能にします。最後に、Inlineは数多くのプログラミング言語をサポートします(単にCやC++だけでなく)。CPRをサポートしています。多くの追加の計画があります。モジュールの使い方¶Inlineは、あなたが使ってきたほとんどPerlモジュールとはちょっと違います。それはあなたの名前空間に何も関数をインポートしませんし、オブジェクト指向のメソッドも持っていません。...'コマンドを通して指定されます。Inlineの全ての異なる方法を説明します。今すぐInlineでCを使い始めたければ、Inline::C-Cookbookをご覧ください。code&quot;;'X'のところはサポートされているInlineプログラミング言語の1つになります。2番目のパラメータはPerlに結び付けたいソースコードを示します。Perlプログラムで、最も簡単で最も見た目にはっきりとソースコードを指定する方法は、特別なDATAキーワードを使うことです。これはDATAファイルハンドルの入力ストリームで特別な印を探すようにInlineに伝えます。この例では__Java__が特別な印です。それは2つのダブルスコアで囲まれたプログラミング言語になります。セクションの後のすべてのテキストになります。mainの外で動くのであれば、__DATA__マーカーを使うことが一番です。なければInlineはあなたのコードを見つけることができません。この仕組みではPerlのコードは先頭にあるままです。醜いJavaのコードは全て下に入ります。これは見た目にはっきりし、維持しやすいコードにします。すばらしい副産物として、Perlの文字列でのように文字を何もエスケープする必要がありません。ソースコードはその文字通りになります。このため、私はこの方法が一番好きです。この形式の唯一の問題点は、Perlが実行時までDATAファイルハンドルを読むことが出来ないので、実行時まであなたの関数をバインドすることが明らかに出来ないことです。この正味の影響は、Perlがコンパイルする間それらが存在することが分からないので、(それらをあらかじめ宣言することなく)Inlineの関数をそのままの名前で使うことが出来ないことです。*/これはソースコードを指定する最も新しい方法です。Conwayによって作成されたPerlモジュールInline::Filesを使用します。基本的な形式と意味はDATAキーワードと同じです。書き方と意味にいくつかの工夫が入っています。Inline::Files'とする必要があります。特別な'DATA'キーワードは'FILE'あるいは'BELOW'に置き換えることができます。&#39;BELOW&#39;;現在は__DATA__タグを省略することが出来ます。Inline::Filesは、Perlがそれをコンパイルする前に、あなたのプログラムからこれらのセクションを削除するソースフィルタです。それらはInlineが使用するために利用できます。この全てがコンパイル時に行われるので、'DATA'キーワードでの警告について心配する必要がありません。このモジュールはいくつかの小さな注意点があります。Inline::Filesは大文字のファイルのマーカーしか理解しないので、言語名を大文字の形式で指定しなければなりません。同様に、ソースコード・フィルタを使うためには起動時のペナルティがあります。この時点では、Inline::Filesはアルファ版のソフトウェアで、それを使用することは実験的です。このモジュールをInlineに統合することも始まったばかりです。Inline::Filesでやろうとしていることに、拡張がコンパイルしなかったときエラーメッセージが正しいソースファイルと行番号を示すように、行番号情報を取得することがあります。私ができる最もよいアドバイスはテストのためにはInline::Filesを使い(特に改良のサポートとしては)、製品用や配布用/CPANコードにはDATAを使うことです。Perlのコードはここ...ソースコードを1つの文字列として指定することもできます。文字列を書く手軽な方法はPerlでの引用のための"ヒアドキュメント"形式を使うことです。これは小さな関数では大丈夫ですが、大きなものでは厄介なことになるでしょう。残念ながらバックスラッシュ文字をすべてエスケープする必要もあります。プラスの面としては、文字列変数はおそらく起動時のペナルティが最少で、全ての関数がコンパイル時に結び付けられることがあります。スカラ変数にその文字列を入れたければ、useステートメントがコンパイル時のディレクティブであるとこに気がついてください。Inline'ステートメントの前に設定されていなければなりません。関数BEGINブロック・メソッドを使うもう1つの方法は、'Inline->bind()'メソッドを使って実行時にソースコードを指定することです。...'と同じ引数を取ります。$code);bind()は強力な機能ですが、それはInlineをベースとしたモジュールにはお薦めしません。実際、インストールすることができるモジュールには全く機能しません。Inlineでモジュールを作るためには下記の手順をご覧ください。その他のメソッドInlineのためのソースコードは、外部ファイル名、ソースコードを返すサブルーチンへのリファレンス、あるいはソースコードの行が入った配列へのリファレンスとしても指定することができます。これらのメソッドはそれほど頻繁には使われませんが、状況によっては便利でしょう。上記で説明された'DATA'あるいは'FILE'メソッドを使い、さらに特別なパラメータが無ければ、そのキーワードを省略することが出来ます。*/DATAセクションについての詳細情報¶もしあなたがモジュールを書くのであれば、DATAセクションをPODやAutoLoaderサブルーチンのためにも使いたいかもしれません。最初のInlineマーカーよりも前にそれらを置くようにだけしてください。ヘルパーモジュールInline::Filtersをインストールすると、あなたのInlineコードの内側でもPODを使うことさえもできます。あなたは外すためのフィルタを指定するだけです。複数のInlineセクション、おそらく異なるプログラミング言語を指定することもできます。'DATA'"を持つ必要があり、それが同じ順番でなければならないということです。これにより各セクションに異なる構成設定オプションを適用することができます。構成設定オプション¶Inlineはできるだけ多く正しいことをしようとします。場合によっては、デフォルトの動きを上書きする必要があるかもしれません。これを行うのは簡単です。Inline構成設定オプションを通常のInlineパラメータの後に並べてください。全ての構成設定オプションは(キー,値)の組み合わせで指定されます。&lt;&lt;&#39;END_OF_C_CODE&#39;;特殊なキーワード'Config'は、これが構成設定のみの呼び出しであることをInlineに伝えます。ソースコードはコンパイルされたり、Perlに結び付けられたりしません。特定の言語に適用されない、グローバルな構成設定オプションを指定したいのであれば、呼び出しのさいに言語をはずすだけです。&#39;./inline_dir&#39;;Configオプションは継承され、追加されます。何回でも好きなだけConfig呼び出しを使うことが出来ます。異なるコードセクションに異なるオプションを適用することができます。ソースコード・セクションが渡されたとき、Inlineはその時点で指定されている全てのオプションを適用します。後の呼び出しの全てに適用されます。2番目のConfigは残りのCのセクションに適用されます(しかしPythonセクションには適用されません)。local2が使われます。(ほとんどのオプションは文字列と配列リファレンスのどちらも受け付け、適切に対応します。)Pythonセクションはglobalライブラリは利用しません。同じDIRECTORYを使用します。警告は無効になっています。2番目のCのセクションはlocal3ライブラリだけを使用します。それはundefという値が付加する動きをリセットするからです。DIRECTORYとNOWARNというオプションは汎用的なInlineオプションです。他の全てのオプションは言語に特有です。Cのオプションが何かを見るためには、Inline::Cをご覧ください。Inlineの0.30より前のバージョンは、Inlineを構成設定するために、Inline::Configというモジュールを使いました。このモジュールはもはやサポートされていません。Inlineではもはや機能しません。それをインストールしているのであれば、時折、発生する警告を避けるため、それを削除してください。Inline::Configで全てのことは、新しい構成設定の書き方を通して今でも可能です。Off¶もしある構成設定オプションの選択肢が1と0であれば、ENABLEとDISABLEという修飾語を使うことが出来ます。CLEAN_AFTER_BUILD;他のものと'一緒(=with)'¶Inlineは他のPerlモジュールからより多くの構成設定オプションを取得するように伝える特別な構成設定の書き方を持っています。&#39;Event&#39;;これはInlineにモジュールEvent.pmをロードし、それに構成設定情報を尋ねるように伝えます。APIを持っているので、InlineにEventでのCのコールバックをシームレスに使うために必要とされるすべての情報を渡すことが出来ます。typemap、共有ライブラリ、インクルードファイル、そしてこれが機能するために必要とされるその他の情報を指定する必要がないということです。1つのモジュールあるいはモジュールのリストを指定することができます。Bar);現時点では、EventがInlineと一緒に(=with)機能する唯一のモジュールです。Inlineのショートカット¶Inlineにはコマンドラインから多くの構成設定オプションを設定することができます。これらのオプションは'ショートカット(=shortcut)'と呼ばれます。デバッグのときのように、一時的にだけオプションを設定したいときには、それはとても手軽です。ディレクトリ¶Inlineはコードをビルドし、ビルド結果をインストールするための場所を必要とします。通常の状況では'.Inline/'という名前の1つのディレクトリを使用します。このディレクトリをあなたのホームディレクトリ、カレント・ディレクトリあるいはあなたのプログラムがあるディレクトリに作成すると、Inlineはそれを見つけ、利用します。それを環境変数PERL_INLINE_DIRECTORYや、DIRECTORYキーワード・オプションを使うことにより直接プログラムの中で指定することもできます。Inlineがこれらの全ての場所で、そのディレクトリを見つけることが出来なければ、カレント・ディレクトリかスクリプトがあるディレクトリに'_Inline/'ディレクトリを作成します。Inlineをうまく使うためのキーとなることは、このディレクトリを理解することです。コードを開発するとき、通常このディレクトリをカレント・ディレクトリに作成することが(あるいはInlineにそうさせることが)最もよいでしょう。それがコンパイルされたコードが入っているということを除いてはこのディレクトリについてなんら特別なことは無いということを忘れないでください。いつでも自由に削除することができます。Inlineは次の実行の際、単にスクラッチから初めて、コードを再コンパイルするだけです。強制的にリコンパイルしたいプログラムを複数の持っているのであれば、単純に'.Inline/'を削除してください。あなたが作業しているプロジェクト毎に別の'.Inline/'ディレクトリを持つほうがいいでしょう。安定したコードをホームディレクトリの.Inline/に入れておきたいかもしれません。複数ユーザのシステムでは、それぞれのユーザは独自の'.Inline/'ディレクトリを持つべきでしょう。そのディレクトリを/tmp/のような共有されている場所におくことはセキュリティ上、危険となりえます。全てのプログラマがミスします。正しくないCのコードを書くというように、Inlineでミスをすると、画面上の大きなエラーレポートが表示されます。このレポートはデバッグする場所を教えてくれます。Inlineは何かビルドする必要があるとき、DIRECTORY/build/の下にサブディレクトリを作ります。ここが、あなたの拡張をビルドするために必要な全てのコンポーネントを書き出す場所になります。XSファイル、Makefileそして出力ログファイルといったものがあります。全てがうまくいけば、Inlineはこのサブディレクトリを削除します。エラーがあれば、Inlineはそのディレクトリをそのまま残し、その場所を出力します。あなたがそのディレクトリに行き、何が起こったのかを理解するであろうと考えています。詳細についてはそれぞれのInline言語モジュールのドキュメントをご覧ください。Module)の全てのメタデータのキャッシュされたファイルをconfigというファイルに取っておきます。このファイルはDIRECTORYディレクトリにあります。そのファイルが無ければ、Inlineは新しいものを作成します。それはあなたのシステムでInline::から始まるすべてのモジュールを検索します。将来の呼び出しのために有効な情報を取得するためにそのモジュールのregister()メソッドを呼び出します。新しいILSMを追加するときにはいつでも、Inlineが自動的に新しくインストールされた言語モジュールを見つけるように、このファイルを削除しなければなりません。構成設定オプション¶このセクションは汎用のInline構成設定オプションをリストアップします。言語特有の構成設定については、その言語のドキュメントをご覧ください。DIRECTORY¶DIRECTORY構成設定オプションはInlineが拡張をビルドし、インストールするという両方に使うディレクトリです。通常、Inlineは'.Inline/'というディレクトリを既知のディレクトリの中から検索します。それに失敗すると、'_Inline/'というディレクトリを作成します。あなた独自のディレクトリを指定したければ、この構成設定オプションを使ってください。DIRECTORYのディレクトリはあなた自身が作成しなければならないことに注意してください。Inlineはあなたに代わってそうすることはありません。名前¶このオプションを使ってあなたのInline拡張オブジェクト・モジュールの名前を設定することができます。lib/auto/Foo/Bar/Bar.inl(.inlコンポーネントには、ソースコードが実行形式と同期が取れていることを保証するための依存情報が入っています)NAMEを使わなければ、Inlineはあなたのプログラム名あるいはパッケージ名に基づいて名前を選ぶでしょう。この場合、Inlineは一意であるようにするため、オブジェクト名をMD5フィンガープリントの小さな固まりにしてわからなくするAUTONAMEオプションも有効にするでしょう。AUTONAME¶このオプションはNAMEパラメータが指定されていないときにはいつでも有効になります。&#39;AUTONAME&#39;;AUTONAMEは一意であるようにするために十分なMD5フィンガープリントで分からないようにします。AUTONAMEで作られたオブジェクトは置き換えられることはありません。これは自動的には片付けられないということも意味します。AUTONAMEは小さく、捨ててしまうようなスクリプトにはとても便利です。重要なものについては、常にNAMEオプションを使ってください。VERSION¶Inline拡張オブジェクトのバージョン番号を指定します。これはモジュールだけに有効です。それはグローバル変数$VERSIONに対応しなければなりません。このオプションはモジュールがPerlのsitelibツリーに永続的にインストールされるように設定されているとき(そしてそのときにのみ)使われるべきです。それ以外に使うならばInlineは警告(=croak)するでしょう。VERSIONパラメータの存在は、あなたのコードがインストールすることができる/インストールされたモジュールであることをInlineが知る公式な方法です。directory)にオブジェクトを生成しません。それはだれかのPerlサイト・ツリーにインストールインストールされているモジュールをリコンパイルしようとしません。そこで基本的な規則としては、開発はVERSIONなしに、配布はVERSION付でということになります。WITH¶WITHは、特殊な'with'による書き方の代わりに、構成設定オプションとしても使うことが出来ます。異なるモジュールにおいて=with、異なるInlineコードのセクションを使いたいのであれば、こうしてください。&#39;Event&#39;;WITHの構成設定(=config)形式を使って指定されたモジュールは、自動的にはrequireされません。それはあなた自身がuseしなければなりません。GLOBAL_LOAD¶このオプションはコンパイルされた言語専用です。これはInlineにDynaLoaderに、そのシンボルが他のオブジェクトファイルによって動的に解決されるような方法で、オブジェクトファイルをロードするよう伝えるように指示します。すべてのプラットホームで動くわけではないかもしれません。下記のGLOBALという短縮形をご覧ください。UNTAINT¶このオプションをPerlの-Tスィッチを使うときにはいつでも、このオプションを使わなければなりません。このオプションはInlineに盲目的に全ての汚染された(=tainted)変数を汚染されていないようにするよう伝えます。デフォルトでSAFEMODEを有効にもします。下記のUNTAINTという短縮形をご覧ください。悪意あるコードを妨害するよう、特別なセキュリティ・チェックを実行します。このオプションは安全性を保障することは出来ません。全ての現在実装されてるチェックを有効にします。SAFEMODEを使うことによって若干起動が遅くなります。UNTAINTを使うことは自動的に、このオプションを有効にします。(汚染)チェックしながら、コードの起動を速くする必要があれば、このオプションを手動で無効にする必要があります。安全の危険性について心配していないときにだけ、そうしてください。下記のUNSAFEという短縮形もご覧ください。FORCE_BUILD¶Inlineにプログラムが実行されるたびにソースコードをビルド(コンパイル)させます。下記のFORCEという短縮形をご覧ください。CLEAN_AFTER_BUILD¶Inlineに、ビルドが成功したら現在のビルド領域をきれいにするように伝えます。時にはデバッグのためにこれをDISABLEにしたいかもしれません。下記のNOCLEANという短縮形をご覧ください。DIRECTORY全体にある古いビルド領域をきれいにするように伝えます。下記のCLEANという短縮形をご覧ください。PRINT_INFO¶Inlineにソースコードに関する様々な情報を出力するように伝えます。INFOという短縮形をご覧ください。PRINT_VERSION¶Inlineにそれ自身のバージョン(=Version)情報を出力するよう伝えます。下記のVERSIONという短縮形をご覧ください。REPORTBUG¶Inlineを'REPORTBUG'モードにします。それはバグを報告したいときに望むものです。NOWARN¶このオプションはInlineにすべての警告を無効にするよう伝えます。短縮形¶これは、現在Inlineで利用できる構成設定オプションの短縮形の全てのリストです。Inlineスクリプトを実行するとき、コマンド行からそれらを指定してください。inline_script.pl複数の短縮形をカンマで区切って指定することができます。大文字/小文字は区別されません。Inline'ステートメントが短縮形を設定するために使われるならば、それを追加の目的のために使うことは出来ません。CLEANInlineにビルド領域にある全てのビルド・ディレクトリを削除するように伝えます。通常はこれらのディレクトリはビルドが成功するとすぐに削除されます。例外は、ビルドが失敗したときやあなたがNOCLEANやREPORTBUGオプションを使うときです。FORCE全てが最新であったとしても、コードが再コンパイルされるよう強制します。GLOBALGLOBAL_LOADオプションを有効にします。INFO覆いの下で何が行われようとしているのかを知りたいときには、これはとても便利なオプションです。これはInlineに助けになる情報をSTDERRに出力するように伝えます。出力されるもののなかには、どのInline関数が正常にPerlに結び付けられたかのリストも入っています。NOCLEANInlineにコンパイル後、ビルドに使ったファイルをそのままにしておくよう伝えます。REPORTBUGInlineを'REPORTBUG'モードにします。それはバグを報告したいとき、特別な処理を行います。REPORTBUGは自動的にビルドを強制し、その後、きれいにしないようにもします。これはビルド・ディレクトリをtarし、私にメールできるようにするためです。REPORTBUGは実行すべき手順を厳密に出力します。それを注意して読み、従ってください。tarコマンドを使うように知らせます。あなたのシステムがtarを持っていなければ、同等のzipコマンドを使ってください。SAFESAFEMODEを有効にします。UNTAINTが自動的に有効になります。このコードは特別なセキュリティ・チェックを行いますが、安全性は保証しません。SITE_INSTALLこのパラメータはインストール可能なInlineモジュールを作成するよう使われてきました。Inlineから削除され、さらに簡単で、より強力な仕組みであるInline::MakeMakerに置き換えられました。Inlineでモジュールを作る方法については下記のセクションをご覧ください。UNSAFESAFEMODEを無効にします。-Tのとき起動時間を少し速くするため、UNTAINTと組み合わせて使ってください。その環境が安全であると確信しているときにだけ使ってください。UNTAINTUNTAINTオプションを有効にします。-Tと一緒に使われます。VERSIONInlineに、そのリリース・バージョンを出力するように伝えます。Inlineでモジュールを書く方法¶Inlineを使えば、Cのコードを使うCPANモジュールを書くことは簡単です。Math::Simpleというモジュールを書きたいとします。Math::Simpleこれは配布可能なモジュールを作成するために必要な骨組みを形成する一連のファイルを生成します。}ここで注意しなければならない大切なことは、NAMEとVERSIONパラメータを指定しなければならないことです。NAMEはモジュールのパッケージ名と対応しなければなりません。VERSIONパラメータはモジュールの$VERSION変数に対応しなければなりません。それは/^\d\.\d\d$/という形式でなければなりません。これらはCPANにアップロードする前に行うべきを確実に知っているようにするための、Inlineの健全かどうかのチェックのチェックです。これにより、一旦、モジュールがだれかのシステムにインストールされると、モジュールはいかなる理由があっても自動的には再コンパイルされないことを保証します。これによりInlineをベースとしたモジュールはXSをベースとしたものと全く同じ方法で機能することになります。最後にMakefile.PLを変更する必要があります。WriteInlineMakefile(...);Math::Simpleをインストールする人は"make"するとき、生成されたMakefileは、Cのコードがコンパイルされ、実行可能コードが./blibディレクトリに置かれるように、Inlineを呼び出します。install"が行われると、モジュールは適切なPerlsitelibディレクトリにコピーされます(そこはインストールされるモジュールが行くべきところです)。distこれは配布可能なパッケージであるファイルMath-Simple-0.20.tar.gzを生成します。それがあれば完了です。authorとして、さらにいくつかの責任を持たなければならないことがあります。あなたは多くのドキュメントを書き、多くのテストを書かなければなりません。すばらしいテスト・ハーネスを作るアイデアのための、よりよいCPANモジュールを探してください。実際には、Inlineは(XSなどを使って)手でやるとすれば、あなたがやらなければならないことの全てを自動化しているだけです。&quot;Source-Code&quot;;Cのところはソースコードのプログラミング言語になります。Source-Codeは文字列、ファイル名、配列リファレンスあるいは特別な'DATA'キーワードになります。Inlineが"use"ステートメントで書かれているので、すべてのことはPerlのコンパイル時に行われます。..."ステートメントの前にあるBEGINブロックで行われる必要があります。実行時にInlineにコードを指定する必要が本当にあれば、bind()メソッドを使うことが出来ます。あなたのコードの'DATA'セクションに格納されているソースコードは、InlineでのINITサブルーチンによって読み込まれます。これはDATAファイルハンドルがコンパイル時点では利用できないからです。ソースコードがビルドされているかをチェックするInlineはまだビルドされていないときにだけ、ソースコ−ドをビルドする必要があります。それはこの表面上は魔法のような仕事を非常に簡単で直接的な方法で実現します。それは実質上は一意になる128ビットの"指紋(=フィンガープリント)"を生成するため、ソースコードをDigest::MD5に通します。そのフィンガープリントは、その他の偶発的な情報と一緒に、あなたの実行可能なオブジェクトの隣にある.inlファイルに格納されます。example_pl_3a9a.inlもし全ての偶発的な情報が.inlファイルに格納されている値とマッチすれば、ステップ8に進みます。ビルドしインストールする場所を見つけるこの時点でInlineはソースコードをビルドする必要があることが分かっています。最初に知らなければならないことは、コンパイルに関連する厄介ものをどこに作るか、そしてそれが終わったときオブジェクトをどこに入れるかです。可能であればそれに失敗すると、Inlineはcroakします。これは非常にまれで、単にInlineが使うディレクトリを作成するだけで簡単に直すことができます;モジュール・オプションが永続的なインストールのためにコンパイルされるのであれば、Inlineはビルドするためだけに./_Inline/を使い、実行ファイルをインストールするため$Config{installsitearch}ディレクトリを使うでしょう。この動きはInline::MakeMakerによって引き起こされます。CPANで配布されるモジュールで使われることを目指して、適切な場所にインストールされます。意味的な手がかりのためにソースを解析Inline::Cは、Cのソースコードの固まりを解析し、実行時の結び付けを作ることが出来るようなものを探すため、モジュールParse::RecDescentを利用します。Cでは、全ての関数定義を探し、それを名前とデータ型に分解します。これらの要素はCの関数をPerlのサブルーチンに正しく結びつけるために使われます。PythonやJavaのような他のInline言語はInlineコードを解析するためpythonやjavacモジュールを使います。ビルド環境の作成これでInlineは収集された情報のすべてを取得し、ソースコードを実行形式にビルドするための環境を作成することができます。全ての詳細に入りこむことなく、(Cのための)XSファイルも含めて適切なソースファイルとMakefile.PLを作成します。コードをビルドし、実行形式をインストール惑星は直線に並んでいます。ここからは簡単な部分です。Inlineは単にモジュールをインストールするためにあなたがするであろうことをするだけです。install"します。何かがうまくいかなければ、Inlineはさらに詳しい情報のためにどこを見るべきかを示すメッセージでcroakします。後片付デフォルトでは、Inlineは、すべてが上手くいったものとすれば、ビルド・プロセスで作成されたすべてのゴミを削除します。ビルドに失敗すると、あなたがエラーをデバッグできるように、Inlineは全てをそのままにして残しておきます。NOCLEANという短縮形オプションを設定することも、Inlineに片付けを止めさせます。C++)では、Inlineは、あなたの実行形式をPerlの空間に引っ張り込むためにDynaLoader::bootstrapメソッドを使います。これで全ての外部関数をPerlのサブルーチンのように呼び出すことが出来ます。PythonやJavaのような他の言語は、それ専用のローダを備えています。参考資料¶CでInlineを使うことについての情報についてはInline::Cをご覧ください。CでInlineを使うサンプル・プログラムについてはInline::C-Cookbookをご覧ください。Inlineについて"既に答えられている質問"については、Inline-FAQをご覧ください。サポートされている言語とプラットホームについての情報はInline-Supportをご覧ください。独自のInline言語サポートモジュールを作成することについての情報はInline-APIをご覧ください。Inlineのメーリングリストはinline@perl.orgです。参加するためには、inline-subscribe@perl.orgにメールしてください。バグと欠陥¶Inline.pmはベータ(=BETA)版のソフトウェアです。非常に強力で広く使われているツールですが、まだ開発中であり、発展中です。Inlineは後方互換性のないいくつかの段階を通ることでしょう。したことはあまりありませんし、合理的な理由によるものでしょう。メーリングリストで常に議論されています。...&quot;というコマンドライン・オプションを使ってください。コードを実行してください。出力される説明に従ってください。リリース0.40は、チェックの古いメソッドを新しくより強力なもので置き換えます。そのように新しいコードであり、新しいバグもあるかもしれません。製品の中でInlineを使うのであれば、リリース0.4xが安定していると分かるまでは、最後の0.3xバージョンに留まっていたいかもしれません。Inline::Filtersの作者です。Wonder"として知られています。Association。