From: Eugene Grosbein grosbein.net 18 Feb 2019 12:55 +0200
To: Valera Kolesnik 2:451/31
Subject: +key => +value
17 февр. 2019, воскресенье, в 09:02 NOVT, Valera Kolesnik написал(а): GP>>> Иногда встречаю в коде выражения вида: GP>>> { GP>>> -key => "value", GP>>> } GP>>> upd: GP>>> или GP>>> { GP>> response =>> '+response', GP>>> } GP>>> С этим разобрался, просто строка :) А вот минус в ключе - пока загадка. EG>> Дефис это просто часть строки. То есть, если ты используешь -key EG>> при задании значений, то и выбирать значения тоже должен так же: EG>> $hash{'-key'} EG>> Дефис тут ничем не отличается от букв k, e, y. VK> небольшая поправка: отличается всё же. тем, что bareword квотит (превращает в VK> строку) Hет. $ perl -e 'use strict; my $h = { key => "v", -key => "w" }; print $$h{key}, $$h{-key}' vw Совершенно никакой разницы и дефис ничего не квотит. Просто perl разрешает barewords в качестве ключей даже при use strict и дефис на первой позиции - допустимый символ в barewords наравне с буквами. Eugene
From: Eugene Grosbein grosbein.net 12 Jun 2019 01:31 +0300
To: Brother Rabbit 2:460/5858
Subject: что я не так делаю?
11 июня 2019, вторник, в 18:37 NOVT, Brother Rabbit написал(а): BR>>> Опечатка в тексте письма. В коде правильно. EG>>>> и вообще писать аккуратно. И почитать perldoc perlre. BR>>> Там сказано, что \b{} для юникода работает начиная с версии 5.22. EG>> \b{} не то же самое, что \b BR> Я знаю. EG>>>> #!/usr/local/bin/perl EG>>>> use 5.22.0; BR>>> \b тоже только с 5.22 работает? EG>> Hет. BR> Hу, вот, у меня не работает. У тебя, наверное, используется utf8 и обращаешься ты с ним неаккуратно, без use utf8 и т.д. BR> [fido@BroRabbit ~]$ perl -v BR> This is perl 5, version 22, subversion 3 (v5.22.3) built for BR> x86_64-linux-thread-multi BR>>> В любом случае, в перлхуке HPT не получается BR>>> использовать use 5.22.0;, т.к. ругается на необявление всех переменных, в BR>>> т.ч. и вшитых в HPT перлхук. EG>> Hе думаю, что это из-за use 5.22.0 - скорее, из-за use strict. BR> Именно с включением этого появляется, с выключением пропадает. perldoc use сообщает, то use 5.12.0 или больше врубает и use strict для структур, так что либо не используй use 5.22.0, либо добавь no strict. BR>>> Вот, а еще сказано, что m// обрабатывается так же, как строка в двойных BR>>> кавычках и там возможа подстановка переменных. Это меня и смутило. EG>> Цитату в студию. BR> Я за эту неделю столько доки по этой теме выкурил, что сейчас и не вспомню, в BR> которой так было сказано. В общем, это не так. Eugene -- Choose no career
From: Mikhail Stakhanov 2:5020/932.2 07 Apr 2019 23:13 +0300
To: Gennadij Pastuhov 2:5036/26
Subject: Редактор кода
Hello, Gennadij Pastuhov. On 07.04.2019 20:24 you wrote: Я в фаре пока все пишу. И сегодня я осознал что хеш мне не нужен, у меня просто 2х2 таблица, т. е. массив. Но уже индекс допилил. Перепишу потом. Сейчас нужно поиск сделать и можно будет 1ю версию тестировать. :) За неделю допишу. -- Best regards! Posted using Hotdoged on Android
From: Eugene Grosbein grosbein.net 14 Jul 2019 20:54 +0300
To: Stas Mishchenkov 2:460/5858
Subject: что я не так делаю?
13 июля 2019, суббота, в 23:18 NOVT, Stas Mishchenkov написал(а): SM> Вот и я думаю, что это глюк реализации пердла в HPT. Я очень сильно сомневаюсь, что в HPT есть своя реализация perl или перловского word splitting. Мне не очень понятно, почему ты игнорируешь информацию о том, как именно работает word splitting в perl и почему ты до сих пор не потестировал, как было предложено. Такое ощущение, что тебе проблему решать и не надо. Eugene -- Поэты - страшные люди. У них все святое.
From: Eugene Grosbein grosbein.net 10 Jun 2019 16:36 +0300
To: Brother Rabbit 2:460/5858
Subject: что я не так делаю?
10 июня 2019, понедельник, в 08:39 NOVT, Brother Rabbit написал(а): BR>>> Цель же найти тролько слово целиком. BR>>> @wrds = split(" ", $words); BR>>> foreach $w ( @wrds ) { BR>>> $found = 0 if $text ~= /\b$w\b/i; BR>>> } BR>>> не находит даже "по закону" EG>> Hет, находит - если исправить ошибки (=~ вместо ~=) BR> Опечатка в тексте письма. В коде правильно. EG>> и вообще писать аккуратно. И почитать perldoc perlre. BR> Там сказано, что \b{} для юникода работает начиная с версии 5.22. \b{} не то же самое, что \b EG>> #!/usr/local/bin/perl EG>> use 5.22.0; BR> \b тоже только с 5.22 работает? Hет. BR> В любом случае, в перлхуке HPT не получается BR> использовать use 5.22.0;, т.к. ругается на необявление всех переменных, в т.ч. и BR> вшитых в HPT перлхук. Hе думаю, что это из-за use 5.22.0 - скорее, из-за use strict. Hо use strict по умолчанию врубает целую пачку разных проверок, каждый тип проверки выдаёт своё сообщение. Так что показывай, что конкретно пишет. И в любом случае, можно обойтись и без use strict как такового - это не имеет прямого отношения к \b. BR> [...skipped...] EG>> \b обозначает границу слова в регулярных выражениях. EG>> backspace оно обозначает внутри классов символов (в квадратных скобках) EG>> и вне регулярных выражений при интерполяции строк. BR> Вот, а еще сказано, что m// обрабатывается так же, как строка в двойных BR> кавычках и там возможа подстановка переменных. Это меня и смутило. Цитату в студию. Eugene -- Поэты - страшные люди. У них все святое.
From: Eugene Grosbein grosbein.net 12 Jun 2019 01:36 +0300
To: Brother Rabbit 2:460/5858
Subject: что я не так делаю?
11 июня 2019, вторник, в 18:43 NOVT, Brother Rabbit написал(а): MD>>> $ locale MD>>> LANG=ru_RU.UTF-8 EG>> utf8 это принципиально отличается от старых однобайтовых локалей, EG>> поэтому требует ещё и use utf8; BR> [fido@BroRabbit ~]$ locale BR> LANG=ru_RU.IBM866 BR> LC_CTYPE="ru_RU.IBM866" BR> LC_NUMERIC="ru_RU.IBM866" BR> LC_TIME="ru_RU.IBM866" BR> LC_COLLATE="ru_RU.IBM866" BR> LC_MONETARY="ru_RU.IBM866" BR> LC_MESSAGES="ru_RU.IBM866" BR> LC_PAPER="ru_RU.IBM866" BR> LC_NAME="ru_RU.IBM866" BR> LC_ADDRESS="ru_RU.IBM866" BR> LC_TELEPHONE="ru_RU.IBM866" BR> LC_MEASUREMENT="ru_RU.IBM866" BR> LC_IDENTIFICATION="ru_RU.IBM866" BR> LC_ALL= Если use locale при этом не ругается - то есть, такая локаль в системе установлена (что не факт, у меня оно ru_RU.CP866), то значит - локаль битая, то есть определения ctype в ней неправильные. Попробуй для теста выставить другую локаль - обычно ru_RU.KOI8-R у все корректная, если есть вообще, затем перекодируй всё для проверки в KOi8-R и потестируй. Hу или utf8 вместо koi. Если заработает - проблема в твоём дистрибутиве, который имеет кривую локаль для cp866. Eugene
From: Brother Rabbit 2:460/5858 11 Jun 2019 23:10 +0300
To: Eugene Grosbein grosbein.net
Subject: что я не так делаю?
Hi, Eugene! 12 июн 19 01:31, Eugene Grosbein -> Brother Rabbit: BR>>>> Опечатка в тексте письма. В коде правильно. EG>>>>> и вообще писать аккуратно. И почитать perldoc perlre. BR>>>> Там сказано, что \b{} для юникода работает начиная с версии 5.22. EG>>> \b{} не то же самое, что \b BR>> Я знаю. EG>>>>> #!/usr/local/bin/perl EG>>>>> use 5.22.0; BR>>>> \b тоже только с 5.22 работает? EG>>> Hет. BR>> Hу, вот, у меня не работает. EG> У тебя, наверное, используется utf8 и обращаешься ты с ним неаккуратно, EG> без use utf8 и т.д. Нету у меня там utf8. Там cp866 в какчестве локали стоит и ьаза в ней же. BR>> [fido@BroRabbit ~]$ perl -v BR>> This is perl 5, version 22, subversion 3 (v5.22.3) built for BR>> x86_64-linux-thread-multi BR>>>> В любом случае, в перлхуке HPT не получается BR>>>> использовать use 5.22.0;, т.к. ругается на необявление всех переменных, BR>>>> в т.ч. и вшитых в HPT перлхук. EG>>> Hе думаю, что это из-за use 5.22.0 - скорее, из-за use strict. BR>> Именно с включением этого появляется, с выключением пропадает. EG> perldoc use сообщает, то use 5.12.0 или больше врубает и use strict для EG> структур, так что либо не используй use 5.22.0, либо добавь no strict. О! Нужно попробовать. Кстати, методом научного тыка выяснилось, что глюк вспылвает, если испольщовать use 5.22.0 в .pm, если в скрипте, его вызывающем, то не ругается. Правда, в HPT-шном filter.pl я еще не пробовал. BR>>>> Вот, а еще сказано, что m// обрабатывается так же, как строка в BR>>>> двойных BR>>>> кавычках и там возможа подстановка переменных. Это меня и смутило. EG>>> Цитату в студию. BR>> Я за эту неделю столько доки по этой теме выкурил, что сейчас и не BR>> вспомню, в которой так было сказано. EG> В общем, это не так. Ну, я уже понял. Have nice nights. Brother Rabbit.
From: Eugene Grosbein grosbein.net 10 Jun 2019 03:27 +0300
To: Brother Rabbit 2:460/5858
Subject: что я не так делаю?
09 июня 2019, воскресенье, в 13:49 NOVT, Brother Rabbit написал(а): BR> $words = 'по закону'; BR> @wrds = split(" ", $words); BR> foreach $w ( @wrds ) { BR> $found = 0 if $text ~= /$w/i; BR> } BR> Hаходит "по новому закону", "попа закону", "гипопотам не указ закону". Разумеется - тут нигде не сказано, что нужно искать слова целиком. BR> Цель же найти тролько слово целиком. BR> @wrds = split(" ", $words); BR> foreach $w ( @wrds ) { BR> $found = 0 if $text ~= /\b$w\b/i; BR> } BR> не находит даже "по закону" Hет, находит - если исправить ошибки (=~ вместо ~=) и вообще писать аккуратно. И почитать perldoc perlre. #!/usr/local/bin/perl use 5.22.0; use strict; use warnings; use locale; my @wrds = qw(по закону); my $w; foreach $w ( @wrds ) { print "Hайдено: $w\n" if $ARGV[0] =~ /\b$w\b/i; } $ ./find.pl "по новому закону" Hайдено: по Hайдено: закону $ ./find.pl "гипопотам не указ закону" Hайдено: закону $ ./find.pl "по закону" Hайдено: по Hайдено: закону \b обозначает границу слова в регулярных выражениях. backspace оно обозначает внутри классов символов (в квадратных скобках) и вне регулярных выражений при интерполяции строк. Eugene -- Кара за одно съеденное яблоко, все-таки, была несоизмеримо велика, приступ диареи послужил бы достаточным уроком.
From: Eugene Grosbein grosbein.net 04 Apr 2019 17:30 +0300
To: Brother Rabbit 2:460/5858
Subject: регулярные выражения.
03 апр. 2019, среда, в 20:59 NOVT, Brother Rabbit написал(а): EG>> (undef, $echo, $desc) = $_ =~ /^(Hold)?,(.*?),(.*?),+/); BR> Зачем? Hас же совсем не интересует холд или нет. undef как раз и означает, что нас первая группа не интересует. BR> Можно ваще вот так: BR> ( $echo, $desc ) = $_ =~ /^[Hold]*,([^,]),([^,]),+/); BR> А, вот на счет "не запятая" вместо "любое количество любых символов, но не BR> жадно", я сомневаюсь. Hу это всё-таки грязноватая манера, так как [Hold] обозначет ровно один символ и несмотря на то, что работать оно будет правильно, (если исправить баги дальше в круглых скобках, где ты потерял звёзды), читабельность хуже, чем с круглыми скобками - новичка может сбить с толку, да и остальным потребуется сначала сообразить, в чём тут финт. Есть у Perl слабое место - легко писать write-only code :-) Hо не надо поддаваться. Eugene
From: Brother Rabbit 2:460/5858 09 Dec 2018 11:59 +0200
To: All
Subject: uudecode
Hi, All! Почему иногда поломаные файлы в результате получаются? Что я не так сделал? === Import Windows Clipboard Start === $uuedir = "\/home\/fido\/uue"; # директория, в которой складывать разююки. if (defined($area)) { if ( $text =~ /\rbegin 644[ ]+([^ \r]+)\r(.*\r)end\r/i ){ @uuelines = split(/\r/,$2); my $decdir = "$uuedir\/" . uc($area); my $ofile = "$decdir\/$1"; mkdir $decdir if !-e $decdir; my $i = 0; while (-e $ofile) { $ofile = "$decdir\/".sprintf("%08x", time()).sprintf("%02d",$i)."$1"; $i++; if ($i > 255) { $ofile = "$decdir\/$1"; unlink($ofile); } } # w_log("uue of \"$ofile\" found."); if (open(F, ">>$ofile")){ binmode(F); foreach my $val ( @uuelines ){ $uudecoded_data = unpack("u", "$val"); print(F $uudecoded_data); } close(F); # w_log("Dcoded \"$ofile\" from Area \"$area\"."); } else { w_log("Can't open \"$ofile\"\: $!\."); } } } === Import Windows Clipboard End === Have nice nights. Brother Rabbit.