|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Sergey 2:5020/400 24 Dec 2006 17:56:06 To : All Subject : Hет логики ни в чем -------------------------------------------------------------------------------- Привет. Кто-нибудь может по-человечески объяснить, как работают операторы \L \l \U \u и им подобные? Я ни в книжках, ни в файлах к activeperl этого не нашел. У этих операторов есть какая-нибудь ассоциативность и приоритет? Берем пример: print "\L\udD"; \L говорит, что все буквы до конца строки будут маленькими, \u говорит: фиг тебе, d сразу после меня все равно будет большой. Есть ли какое-то правило, чтобы это определять? В результате получается Dd. Берем другой пример: print "\LdD\udD"; \L и \u говорят то же самое, в результате получаем dddd... Маразм? Да! По идее, у подобных операторов должна быть правая ассоциативность, но на самом деле вообще непонятно, как они работают. И почему последовательность "...\L\U..." и обратная ей считаются ошибкой синтаксиса? Почему \l\u не считаются? Стоит попробовать капнУть Перл поглубже, как натыкаешься на что-то гнилое. Я уже сюда писал, что код map{while(1){}}@a; завешивает транслятор до версии 5.8.5 и на виндовс, и на юникс. Здесь смысл не в том, что циклы пустые, а лишь в том, что цикл while стоит внутри цикла map. Когда я начал выяснять, что послужило причиной зависания моей программы, то у меня сложилось впечатление, что я первый, кто начал программировать на Перле. Как будто не было 15-летней мировой практики, и я впервые вставил while внутрь map. В процессе написания несложных программок я наткнулся еще на пару ошибок, но вовремя их не зафиксировал и не запомнил. Hедавно наткнулся на такое описние условного шаблона в документации Perl/html/lib/Pod/perlretut.html#conditional_expressions: Conditional expressions A conditional expression is a form of if-then-else statement that allows one to choose which patterns are to be matched, based on some condition. There are two types of conditional expression: (?(condition)yes-regexp) and (?(condition)yes-regexp|no-regexp). И далее: The condition can have two forms. The first form is simply an integer in parentheses (integer). Hе должно быть скобок вокруг условия, должно быть (? condition yes-regexp) and (? condition yes-regexp|no-regexp) А то по этому определению надо писать (?((1))..., а это ошибка синтаксиса. Это определение с лишними скобками пошло гулять по справочникам и прочим учебникам. Хоть бы кто удосужился его проверить. Вот так вот, вместо того, чтобы писать лекции, приходится заниматься этой бесплатной тратой времени. Видимо, на атомных элктростанциях не используют Перл, а то бы все уже почувствовали на себе эту самую мощь Перла и его регулярных выражений. Есть ли кто-то, кто платит деньги за найденные ошибки в Перле? Я подозреваю, что смогу стать миллионером... Сергей --- ifmail v.2.15dev5.3 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор Архивное /ru.perl/1667916bd4cd8.html, оценка из 5, голосов 10
|