Perché l'operatore di smart match di Perl 5 è considerato rotto? [chiuso]


17

Ho visto un certo numero di commenti sul web, l'operatore di smart match di Perl è rotto . So che originariamente faceva parte di Perl 6, quindi è stato implementato in Perl 5.10 a partire da una vecchia versione delle specifiche e quindi corretto in 5.10.1 per corrispondere alle specifiche Perl 6 correnti.

Il problema è stato risolto in 5.10.1+ o ci sono altri problemi con l'operatore di smart-match che lo rendono problematico in pratica?

Quali sono i problemi?

Esiste una versione ancora più aggiornata (forse Perl 6) che risolve i problemi?

Modifica: Per chiarire, non sto chiedendo dei bug, ma piuttosto l'opinione che il comportamento previsto ~~sia cattivo.


Non sarebbe meglio su SO?

3
Quindi sembra odiare le domande a cui non è possibile rispondere con frammenti di codice in questi giorni.
Sean McMillan,

2
Non penso che appartenga a SO, chiede una spiegazione concettuale del perché l'operatore di smart match di Perl sia considerato rotto.
yannis,

1
Da quello che vedo nel tuo link, sembra che smart-match sia (o fosse) ricorsivo, quindi potrebbe probabilmente portare a una ricorsione infinita solo perché un array (possibilmente indirettamente) contiene un riferimento a se stesso.
user281377,

2
@SeanMcMillan - SO odia molte cose in questi giorni: /
Rook

Risposte:


14

Le persone spesso confondono i problemi che sorgono con l'operatore di smartmatch con quelli che sorgono con il given/whencostrutto, come il problema del lessico $_.

Sono giunto al parere che se usi l'operatore smartmatch solo sui letterali, non impazzirai. Non posso fare promesse su qualsiasi altra situazione. Cercare di capire cosa $a ~~ $bsta facendo è sufficiente a spingere qualsiasi essere umano decente a correre urlando di follia e ad adottare un altro linguaggio di programmazione.

O almeno, questa è la presa che ho preso da Larry quando stava modificando la sezione smartmatch della 4a edizione di Programming Perl .


4

L'operatore di match intelligente non era "rotto" , ma aveva molti bug. Perl v5.12 ha risolto questo problema e Perl v5.14 l'ha perfezionato IMHO. Quindi, per rispondere alla tua domanda, Perl v5.12 e versioni successive risolvono questo problema. Puoi provarlo con le versioni successive di Perl v5.10, ma so che funziona meglio in Perl 5.12+.

Modifica: per rispondere alla tua modifica, consulta questo blog . Dopo aver letto l'articolo, credo che abbia risposto sufficientemente alla tua domanda.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.