2

Perl は、戻り値の型による関数のオーバーロードをサポートする言語の 1 つです。

これの簡単な例はwantarray()です。

この wantarray() を拡張し、他の多くの戻り値の型にオーバーロードを提供する、CPAN で利用できる優れたモジュールはほとんどありません。これらのモジュールはContextual::ReturnWantです。残念ながら、これらのモジュールは両方とも perl バージョン 5.8.9 で perl 批評家に失敗するため、使用できません (この perl バージョンをアップグレードすることはできません)。

だから、私は Contextual::Return と Want のような独自のモジュールを最小限で書くことを考えています。Contextual::Return および Want モジュールのコードを理解しようとしましたが、専門家ではありません。

戻り値の型 BOOL、OBJREF、LIST、SCALAR のみに対して関数のオーバーロードが必要です。

ガイドラインを提供してください。どうすれば開始できますか。

4

1 に答える 1

6

Contextual::Returnやのように Perl の構文をいじるモジュールは、Wantほぼ確実に に違反しPerl::Criticます。この場合、主な違反はstrict、サブルーチン プロトタイプの無効化と使用であり、これは最小限です。

個人的には、すべてのコードが任意の一連のテストに例外なく合格しなければならないと主張するのはばかげたルールだと思いますが、コードが呼び出されたコンテキストに応じて非常に異なる動作をするコードは、設計が不適切である可能性が高いと考えています。理解と維持が困難です。wantarrayPerl は通常、説明しなくても正しいことを行うため、使用されることさえほとんどありません。

使用するのが面白そうなモジュールに出くわし、何らかの方法でそれをコードに組み込みたいと思うかもしれません。あなたが説明した包括的なコンテキストチェックを必要とするサブルーチンの例を示して、私の考えを変えることができますか?

于 2012-07-13T14:49:00.237 に答える