Mengapa operator pertandingan pintar Perl 5 dianggap rusak? [Tutup]

17

Saya telah melihat sejumlah komentar di seluruh operator pertandingan pintar web Perl rusak . Saya tahu ini awalnya adalah bagian dari Perl 6, kemudian diimplementasikan di Perl 5.10 dari versi lama spec, dan kemudian diperbaiki di 5.10.1 agar sesuai dengan spesifikasi Perl 6 saat ini.

Apakah masalah teratasi pada 5.10.1+, atau adakah masalah lain dengan operator kecocokan-pintar yang membuatnya sulit dalam praktik?

Apa masalahnya?

Apakah ada versi yang lebih banyak diperbarui (Perl 6, mungkin) yang memperbaiki masalah?

Sunting: Untuk mengklarifikasi, saya tidak bertanya tentang bug, melainkan pendapat bahwa perilaku yang dimaksud ~~buruk.

Sean McMillan
sumber
Bukankah ini lebih baik di SO?
3
Jadi sepertinya membenci pertanyaan yang tidak dapat dijawab dengan cuplikan kode hari ini.
Sean McMillan
2
Saya tidak berpikir itu milik SO, ia meminta penjelasan konseptual tentang mengapa operator pertandingan-pintar Perl dianggap rusak.
yannis
1
Dari apa yang saya lihat di tautan Anda, tampaknya kecocokan-pintar adalah (atau tadinya) rekursif, sehingga mungkin bisa menyebabkan rekursi tak terbatas hanya karena sebuah array (mungkin secara tidak langsung) berisi referensi ke dirinya sendiri.
user281377
2
@SeanMcMillan - SO membenci banyak hal hari ini: /
Rook

Jawaban:

14

Orang sering bingung masalah yang muncul dengan operator smartmatch dengan yang muncul dengan given/whenkonstruk, seperti masalah leksikal $_.

Saya berpendapat bahwa jika Anda menggunakan operator smartmatch hanya pada literal, Anda tidak akan menjadi gila. Saya tidak bisa membuat janji tentang situasi lainnya. Mencoba mencari tahu apa $a ~~ $byang dilakukan sudah cukup untuk mendorong setiap manusia yang layak untuk berlari menjerit kegilaan, dan mengambil bahasa pemrograman lain sekaligus.

Atau setidaknya, itulah yang saya dapatkan dari Larry ketika dia mengedit bagian smartmatch dari Pemrograman Perl edisi ke-4 .

tchrist
sumber
4

Operator pertandingan pintar tidak "rusak" , tetapi memiliki banyak bug. Perl v5.12 memperbaikinya, dan Perl v5.14 menyempurnakannya IMHO. Jadi, untuk menjawab pertanyaan Anda, Perl v5.12 dan lebih tinggi memperbaiki masalah ini. Anda dapat mencobanya dengan versi Perl v5.10 yang lebih baru, tetapi saya tahu ini bekerja lebih baik di Perl 5.12+.

Sunting: Untuk menjawab sunting Anda, lihat blog ini . Setelah membaca artikel itu, saya yakin itu cukup menjawab pertanyaan Anda.

Dinamis
sumber