63

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 のユーザーと実装者の両方にとって問題があり、混乱を招くことも証明されています。この問題にどのように対処するのが最善かについて、多くの提案がなされてきました。スマートマッチが将来変更されるか、なくなることはほぼ確実です。現在の動作に依存することはお勧めしません。パーサーが ~~、given、または when を見たときに警告が発行されるようになりました。

過去 10 年間の Perl での最も重要な変更がどのように実現されたのか、私は混乱しています。givenwhen、およびをあちこちで使い始めましsmartmatchた。これらの先物について、これ以上の情報はありますか? それらを「混乱させている」と感じる人はいますか?これらの機能はどのように変化する可能性がありますか? これらの機能をモジュールで実装する計画はありますか?

4

3 に答える 3

37

スマートマッチングの設計には問題があります。与えられたものは何をTYPE ~~ TYPEすべきかという決定は、ほとんどの場合、自明ではなく、一貫性がなく、および/または議論されています。目的は、スマート マッチングを削除することではありません。それを直すことです。

具体的には、5.18 パンプキンによる提案~~でわかるように、大幅に簡素化されます。2 つのものをどのように一致させるかに関する決定は、Smart::Matchに既に存在するヘルパーなどで行われます。

... ~~ any(...)

これははるかに読みやすく、柔軟性が高く (完全に拡張可能)、多くの問題を解決します (「X を数値と見なすべき場合と、文字列と見なすべき場合とは?」など)。

于 2013-06-05T02:25:34.650 に答える