Чому оператор розумних матчів Perl 5 вважається порушеним? [зачинено]


17

Я бачив низку коментарів в Інтернеті , оператор розумних матчів Perl зламаний . Я знаю, що вона спочатку була частиною Perl 6, потім була реалізована в Perl 5.10 від старої версії специфікації, а потім була виправлена ​​в 5.10.1, щоб відповідати поточній специфікації Perl 6.

Чи проблема виправлена ​​в 5.10.1+ чи є інші проблеми з оператором смарт-відповідника, які роблять її проблемою на практиці?

Які проблеми?

Чи є ще оновлена ​​версія (можливо, Perl 6), яка усуває проблеми?

Редагувати: Для уточнення я не запитую про помилки, а швидше думки про те, що передбачувана поведінка ~~є поганою.


Хіба це не було б краще на SO?

3
Отож, схоже, ненавидять питання, на які сьогодні не можна відповісти з фрагментами коду.
Шон Макміллан

2
Я не думаю, що він належить до SO, він просить концептуальне пояснення того, чому оператор розумних матчів Perl вважається порушеним.
янніс

1
З того, що я бачу у вашому посиланні, виходить, що смарт-відповідність (або була) рекурсивна, тому це, ймовірно, може призвести до нескінченної рекурсії лише тому, що масив (можливо, опосередковано) містить посилання на себе.
користувач281377

2
@SeanMcMillan - ТАК ненавидить багато чого за ці дні: /
Rook

Відповіді:


14

Люди часто плутають проблеми, які виникають у оператора smartmatch, з тими, що виникають із given/whenконструкцією, наприклад, проблема лексичного $_.

Я прийшов до думки, що якщо ви будете використовувати оператор smartmatch лише на літералах, ви не зникнете з розуму. Я не обіцяю жодної іншої ситуації. Спроби розібратися в тому, що $a ~~ $bробиться, достатньо, щоб змусити будь-якого порядного людського люду кричати в безумстві і взагалі зайнятись іншою мовою програмування.

Або, принаймні, це те, що я отримав від Ларрі, коли він редагував розділ smartmatch 4-го видання Programming Perl .


4

Оператор смарт-матчу не був "зламаний" , але в ньому було багато помилок. Perl v5.12 виправив це, і Perl v5.14 удосконалив його IMHO. Отже, щоб відповісти на ваше запитання, Perl v5.12 і вище виправляє цю проблему. Ви можете спробувати його з пізнішими версіями Perl v5.10, але я знаю, що він краще працює в Perl 5.12+.

Редагувати: Щоб відповісти на вашу редагування, перегляньте цей блог . Прочитавши статтю, я вважаю, що вона достатньо відповіла на ваше запитання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.