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.