Warum gilt der Smart-Match-Operator von Perl 5 als defekt? [geschlossen]

17

Ich habe eine Reihe von Kommentaren im Internet gesehen, die den Smart-Match-Operator von Perl nicht unterstützen . Ich weiß, dass es ursprünglich Teil von Perl 6 war, dann in Perl 5.10 aus einer alten Version der Spezifikation implementiert und dann in 5.10.1 korrigiert wurde, um der aktuellen Perl 6-Spezifikation zu entsprechen.

Wurde das Problem in 5.10.1+ behoben oder gibt es andere Probleme mit dem Smart-Match-Operator, die es in der Praxis problematisch machen?

Was sind die Probleme?

Gibt es eine aktuellere Version (vielleicht Perl 6), die die Probleme behebt?

Bearbeiten: Um das zu klären, frage ich nicht nach Fehlern, sondern bin der Meinung, dass das beabsichtigte Verhalten von ~~schlecht ist.

Sean McMillan
quelle
Wäre das nicht besser auf SO?
3
Scheint Fragen zu hassen, die heutzutage nicht mit Code-Snippets beantwortet werden können.
Sean McMillan
2
Ich glaube nicht, dass es zu SO gehört, es fragt nach einer begrifflichen Erklärung, warum Perls Smart-Match-Operator als kaputt angesehen wird.
Yannis
1
Nach dem, was ich in Ihrem Link sehe, scheint Smart-Match rekursiv zu sein (oder war es), sodass es wahrscheinlich zu einer unendlichen Rekursion führen kann, nur weil ein Array (möglicherweise indirekt) einen Verweis auf sich selbst enthält.
user281377
2
@SeanMcMillan - SO hasst heutzutage eine Menge Dinge: /
Rook

Antworten:

14

Leute verwechseln oft die Probleme, die mit dem Smartmatch-Operator auftreten, mit denen, die mit dem given/whenKonstrukt auftreten, wie zum Beispiel das Problem der Lexik $_.

Ich bin zu dem Schluss gekommen, dass Sie nicht verrückt werden, wenn Sie den Smartmatch-Operator nur für Literale verwenden. Ich kann in keiner anderen Situation etwas versprechen. Der Versuch, herauszufinden, was $a ~~ $bgetan wird, reicht aus, um jeden anständigen Menschen dazu zu bringen, vor Wahnsinn schreiend davonzulaufen und eine andere Programmiersprache aufzunehmen.

Zumindest ist das die Einstellung, die ich von Larry erhalten habe, als er die Smartmatch-Sektion der 4. Ausgabe von bearbeitet hat Programming Perl .

tchrist
quelle
4

Der Smart Match Operator war nicht "kaputt" , hatte aber viele Fehler. Perl v5.12 hat das behoben und Perl v5.14 hat es meiner Meinung nach perfektioniert. Um Ihre Frage zu beantworten, behebt Perl ab Version 5.12 dieses Problem. Sie können es mit späteren Versionen von Perl v5.10 versuchen, aber ich weiß, dass es in Perl 5.12+ besser funktioniert.

Bearbeiten: Informationen zum Beantworten Ihrer Bearbeitung finden Sie in diesem Blog . Nachdem ich den Artikel gelesen habe, glaube ich, dass er Ihre Frage ausreichend beantwortet hat.

Dynamisch
quelle