web-dev-qa-db-ja.com

Perl 5.20とスマートマッチングと指定されたタイミングの運命?

Perl 5.18をインストールしたばかりですが、このような警告が多く表示されますが、

given is experimental at .\[...].pl line [...].
when is experimental at .\[...].pl line [...].
Smartmatch is experimental at C:/strawberry/Perl/site/lib/[...] line [...].

これらの警告(私がどこにも言及したことは聞いたことがありません)を調べると、これは2か所でしか見つかりませんでした

Perl Deltaは、これらの機能で何が起きているかについて言及するために、まだ最も多くを行います。

V5.10.0で追加され、v5.10.1で大幅に改訂されたスマートマッチは、不満の定期的なポイントでした。便利な方法は多数ありますが、Perlのユーザーと実装者の両方にとって問題と混乱を招くことも判明しています。問題への最善の対処方法について多くの提案がありました。スマートマッチがほぼ確実に変更されるか、将来的に廃止されることは明らかです。現在の動作に依存することはお勧めしません。パーサーが~~、指定された、またはいつ表示されるかを警告するようになりました。

過去10年間でPerlの最も重要な変化がどのように引き出されるのか、私は混乱しています。 givenwhen、およびsmartmatchをあらゆる場所で使い始めました。これらの先物に関する情報はありますか?誰がどのようにそれらを「紛らわしい」と思いますか?これらの機能はどのように変更される可能性がありますか?これらの機能をモジュールで実装する計画はありますか?

61
Evan Carroll

スマートマッチングの設計には問題があります。与えられたTYPE ~~ TYPEすべきことは、ほとんどの場合、自明ではなく、一貫性がなく、および/または紛争です。アイデアは、スマートマッチングを削除することではありません。それを修正することです。

具体的には、~~は、5.18ポンピングによる 提案 でわかるように、大幅に簡略化されます。 Smart :: Match に既に存在するヘルパーなど、2つのことをどのように一致させるべきかについての決定はヘルパーによって行われます。

... ~~ any(...)

はるかに読みやすく、はるかに柔軟(完全に拡張可能)で、多くの問題を解決します(「Xをいつ数字と見なすべきか、いつ文字列と見なすべきか」など)。

37
ikegami

rjbsが提案するsmartmatchの変更 を読むことで、いくつかの洞察が得られるかもしれません。結局、彼はポンピング(Perlリリースマネージャー)であるため、彼のコメントと将来の見解は、ほとんどの場合よりも関連性があります。この問題に関するコミュニティのコメントもたくさんあります。たとえば、 here を参照してください。 「実験的」ステータスが有効なのは、物事は将来変更される可能性が高いため、たとえそれらの変更が何であるかわからなくても、ユーザーにその事実を知らせる責任があるためです。

21
Joel Berger

まあ、それはこの機能セットを実験にダウングレードしたパッチの 説明 で言われていることです:

Given/when/~~の動作はPerl 5.20.0で変更される可能性があります。スマートマッチは削除されるか、削除されます。これを考慮して、これらの機能のユーザーは警告されるべきです。これらの機能を使用する場合は、カテゴリ「experimental :: smartmatch」警告を発行する必要があります。

そのため、実際にこれらの警告をオフにするには、次のようにします( source ):

no if $] >= 5.018, warnings => "experimental::smartmatch";

...それは単に問題に目を向けるだけです。

9
raina77ow