CPANモジュールのソースを分析すると、次のようになります。
...
package # hide from PAUSE
Try::Tiny::ScopeGuard;
...
明らかに、それはから取られていますが、他のモジュールのキーワードとパッケージ識別子 の間Try::Tiny
にもこの種のコメントがあります。package
なぜこの手順が使用されるのですか?その目標は何ですか、そしてそれはどのような利点がありますか?
CPANモジュールのソースを分析すると、次のようになります。
...
package # hide from PAUSE
Try::Tiny::ScopeGuard;
...
明らかに、それはから取られていますが、他のモジュールのキーワードとパッケージ識別子 の間Try::Tiny
にもこの種のコメントがあります。package
なぜこの手順が使用されるのですか?その目標は何ですか、そしてそれはどのような利点がありますか?
確かに、PAUSEのインデクサーからパッケージを隠すのはハックです。
ディストリビューションがPAUSEにアップロードされると、インデクサーはアップロード内の各ファイルを調べて、ディストリビューションに含まれているパッケージの名前を探します。インデックスに登録されたパッケージは、CPANの検索結果に表示されます。
インデクサーにパッケージを検出させたくない理由はたくさんあります。ディストリビューションには、モジュールの検索結果を乱雑にする小さなパッケージや重要でないパッケージが多数含まれている場合があります。t
(テスト)ディレクトリまたはその他の非標準ディレクトリに、ディストリビューションの一部としてインストールすることを意図していないパッケージが定義されている場合があります。ディストリビューションには、(他の誰かが書いた)完全に異なるディストリビューションのファイルが含まれている場合があります。
package
インデクサーが同じ行のパッケージ名のように見えるキーワードと式を厳密に検索するため、ハックは機能します。
現在、META.yml
ディストリビューションにファイルを含めることができます。no_index
PAUSEインデクサーは、このファイルの仕様を探して尊重します。ただし、これはインデクサーの比較的新しい機能であるため、古いモジュールや古いCPANコントリビューターは引き続き改行ハックを使用します。
no_index
これがからのスペックの例ですForks::Super
no_index:
directory:
- t
- inc
package:
- Sys::CpuAffinity
- Signals::XSIG
- Signals::XSIG::Default
- Signals::XSIG::TieArray56
Sys::CpuAffinity
およびSignals::XSIG
は個別のディストリビューションであり、。も一緒にパッケージ化されていForks::Super
ます。一部のテストスクリプトには、インデックス付けしてはならないpackage
宣言(たとえば)が含まれています。Arbitrary::Test::Package
さて、これがこの現象の別のショットです...私はPerlを12年間ハッキングしてきましたが、このパワフルなハッキングはめったに見られず、おそらく単に無視され、調査する必要はありませんでした。ただし、明確なことが1つあります。古き良きPerl'n'UNIXの考え方で作成された、ハック的な処理がPAUSEで行われています。これは、疑いの余地なく行指向のテキスト解析を伴うため、Perlファイルを解析しますgrep
。それよりもperl
それ自体、知っている人は、パッケージ名を抽出してから、いくつかの手順を開始するか、いくつかの統計情報などを取得します。そして、この手順を実行して、作成者がパッケージ宣言を2行に分割する方法をハックして、ハッキーpacky grepジョブに、パッケージがすぐ下に宣言されているという手がかりがなく、プログラマーがハッキースキルに満足しているようにします。そして、PAUSE統計、またはそれらが一緒にコブリングしているものはすべて、本来あるべき状態です。それは理にかなっていますか?