From: |
Brother Rabbit 2:460/5858 |
03 Apr 2019 20:38 +0300 |
To: |
Mikhail Stakhanov 2:5020/932.1 |
|
Subject: |
регулярные выражения.
|
Hi, Mikhail!
03 апр 19 17:38, Mikhail Stakhanov -> Eugene Grosbein:
EG>> /^(Hold)?,(.*?),(.*?),+/
MS> ($echo,$desc) =($2,$3) if ($_ =~ /^(Hold)?,(.*?),(.*?),+/);
MS> ^^^^^ всеравно $2 $3
MS> всеравно вот так. А я за чистоту кода, хочу:
MS> ($echo,$desc) = $_ =~ /^(Hold)?,(.*?),(.*?),+/);
MS> ^^^^^^^ $1 $2
MS> как написать вот это чтобы работало вот так ?
($echo,$desc) =($1,$2) if ($_ =~ /^[a-z]*,([^,]+),([^,]+),.*$/i);
Have nice nights.
Brother Rabbit.
From: |
Brother Rabbit 2:460/5858 |
11 Jun 2019 18:37 +0300 |
To: |
Eugene Grosbein grosbein.net |
|
Subject: |
что я не так делаю?
|
Hi, Eugene!
10 июн 19 16:36, Eugene Grosbein -> Brother Rabbit:
BR>> Опечатка в тексте письма. В коде правильно.
EG>>> и вообще писать аккуратно. И почитать perldoc perlre.
BR>> Там сказано, что \b{} для юникода работает начиная с версии 5.22.
EG> \b{} не то же самое, что \b
Я знаю.
EG>>> #!/usr/local/bin/perl
EG>>> use 5.22.0;
BR>> \b тоже только с 5.22 работает?
EG> Hет.
Ну, вот, у меня не работает.
[fido@BroRabbit ~]$ perl -v
This is perl 5, version 22, subversion 3 (v5.22.3) built for
x86_64-linux-thread-multi
BR>> В любом случае, в перлхуке HPT не получается
BR>> использовать use 5.22.0;, т.к. ругается на необявление всех переменных, в
BR>> т.ч. и вшитых в HPT перлхук.
EG> Hе думаю, что это из-за use 5.22.0 - скорее, из-за use strict.
Именно с включением этого появляется, с выключением пропадает.
EG> Hо use strict по умолчанию врубает целую пачку разных проверок,
EG> каждый тип проверки выдаёт своё сообщение. Так что показывай,
EG> что конкретно пишет.
6 07:42:01 PERL: Global symbol "%config" requires explicit package name (did
you forget to declare "my %config"?) at /home/fido/perl/fidogle.pm line 82.
6 07:42:01 PERL: Global symbol "$warn_addr" requires explicit package name
(did you forget to declare "my $warn_addr"?) at /home/fido/perl/fidogle.pm line
82.
6 07:42:01 PERL: Global symbol "$UNS" requires explicit package name (did you
forget to declare "my $UNS"?) at /home/fido/perl/fidogle.pm line 83.
6 07:42:01 PERL: Global symbol "$from_name" requires explicit package name
(did you forget to declare "my $from_name"?) at /home/fido/perl/fidogle.pm line
83.
6 07:42:01 PERL: Global symbol "@Via" requires explicit package name (did you
forget to declare "my @Via"?) at /home/fido/perl/fidogle.pm line 84.
6 07:42:01 PERL: Global symbol "$hpt_version" requires explicit package name
(did you forget to declare "my $hpt_version"?) at /home/fido/perl/fidogle.pm
line 85.
6 07:42:01 PERL: Global symbol "%config" requires explicit package name (did
you forget to declare "my %config"?) at /home/fido/perl/fidogle.pm line 85.
6 07:42:01 PERL: Global symbol "%config" requires explicit package name (did
you forget to declare "my %config"?) at /home/fido/perl/fidogle.pm line 85.
BR>> [...skipped...]
EG>>> \b обозначает границу слова в регулярных выражениях.
EG>>> backspace оно обозначает внутри классов символов (в квадратных скобках)
EG>>> и вне регулярных выражений при интерполяции строк.
BR>> Вот, а еще сказано, что m// обрабатывается так же, как строка в двойных
BR>> кавычках и там возможа подстановка переменных. Это меня и смутило.
EG> Цитату в студию.
Я за эту неделю столько доки по этой теме выкурил, что сейчас и не вспомню, в
которой так было сказано.
Have nice nights.
Brother Rabbit.
From: |
Michael Dukelsky 2:5020/1042 |
11 Jun 2019 13:25 +0300 |
To: |
Eugene Grosbein grosbein.net |
|
Subject: |
что я не так делаю?
|
Привет, Eugene!
11 June 2019 03:53, Eugene Grosbein послал(а) письмо к Michael Dukelsky:
MD>> $ locale
MD>> LANG=ru_RU.UTF-8
EG> utf8 это принципиально отличается от старых однобайтовых локалей,
EG> поэтому требует ещё и use utf8;
Не помогло. Однако, если анализируемый текст брать не из командной строки, то
работает.
#!/usr/bin/perl
#use 5.22.0;
use strict;
use warnings;
use locale;
use utf8;
my $text = "гипопотам не указ закону";
my @wrds = qw(по закону);
my $w;
foreach $w ( @wrds ) {
print "Найдено: $w\n" if $text =~ /\b$w\b/i;
}
$ ./find.pl
Wide character in print at ./find.pl line 13.
Найдено: закону
Желаю успехов, Eugene!
За сим откланиваюсь, Michael.
... node (at) f1042 (dot) ru
From: |
Eugene Grosbein grosbein.net |
17 Jul 2019 18:27 +0300 |
To: |
Stas Mishchenkov 2:460/5858 |
|
Subject: |
что я не так делаю?
|
17 июля 2019, среда, в 10:49 NOVT, Stas Mishchenkov написал(а):
SM> Между тем мой эмпириокритицизм позволил мне все-таки найти корень
проблемы.
SM> #!/usr/bin/perl
SM> use POSIX;
SM> use locale;
SM> my $old_locale;
SM> $old_locale = setlocale(LC_CTYPE);
SM> print "$old_locale\n";
SM> в командной строке печатает ru_RU.IBM866, а в filter.pl
SM> use POSIX;
SM> use locale;
SM> my $old_locale;
SM> $old_locale = setlocale(LC_CTYPE);
SM> w_log( "locale: $old_locale\n" );
SM> пишет в лог "locale: С".
90% за то, что система запускает бинарник без выставления локали.
Eugene
--
Поэты - страшные люди. У них все святое.
From: |
Alexey Vissarionov 2:5020/545 |
18 Jul 2019 12:34 +0300 |
To: |
Stas Mishchenkov 2:460/5858 |
|
Subject: |
что я не так делаю?
|
Доброго времени суток, Stas!
18 Jul 2019 09:27:28, ты -> Eugene Grosbein:
SM>>> пишет в лог "locale: С".
EG>> 90% за то, что система запускает бинарник без выставления локали.
SM> Гм. Он у меня действительно по крону запускается от имени пользователя
SM> fido, у которого, впрочем, локаль установлена нужная.
Локаль - свойство процесса, а не пользователя и уж тем более не системы.
--
Alexey V. Vissarionov aka Gremlin from Kremlin
gremlin ПРИ gremlin ТЧК ru; +vii-cmiii-ccxxix-lxxix-xlii
... Чем умные отличаются от дураков? Умные дурачатся, а дураки умничают.
From: |
Mikhail Stakhanov 2:5020/932.1 |
30 Mar 2019 10:02 +0200 |
To: |
Eugene Grosbein grosbein.net |
|
Subject: |
freq скрипт
|
Здравствуйте, Eugene!
Ответ на сообщение Eugene Grosbein (2:5006/1) к Mikhail Stakhanov,
написанное 30 мар 19 в 09:58:
Спасибо!
Кол-во строк сократилось:
#!/usr/bin/perl
# Генератор freq для запросов фалов
# v0.1b от 30.03.2019г.
# Работает пока только с одной зоной
use strict;
use warnings;
my $usage = \ 'EOT';
Использование: freq.pl
Аргументы:
node = 2:5020/932 или 5050/932
file = имя запрашиваемого файла
EOT
# Нужно прописать переменную outbound
my $outbound="d:\\fido\\spool\\out\\";
> здесь он ругается на окончание \', как я понимаю это он воспринимает как
> ' внутри константы, как правильно написать ?
if ($#ARGV<1) { die $usage };
my $adr=$ARGV[0];
my $fname=lc($ARGV[1]);
my ($zone, $net, $node);
$adr =~ m|^(\d+?):(\d+)/(\d+)$| and ($zone,$net,$node)=($1,$2,$3) or
$adr =~ m|^(\d+?)/(\d+)$| and ($net,$node)=($1,$2) and $zone='2' or die
"Ошибка в формате адреса *:*/*";
print "Зона: $zone, Сеть: $net, Нода: $node\n";
> пока зону не использует, но все работает в такой конструкции а можно
> как-то писать and {} чтобы не писать and ... and ... ?
my $adr_hex=sprintf('%04x%04x',$net,$node);
my $freq=sprintf("%s.req",$adr_hex);
die "Системная ошибка $! при записи в $outbound$freq"
unless open(HANDLE,">>$outbound"."$freq") and print HANDLE $fname and
close(HANDLE);
exit(0);
----
Всего наилучшего, Mikhail
From: |
Gennadij Pastuhov 2:5036/26 |
13 Feb 2019 13:10 +0200 |
To: |
Eugene Grosbein grosbein.net |
|
Subject: |
perl strings & Encode::encode
|
Рад всех приветствовать! А особенно - Eugene!
Среда февраля 13 19 15:51 Eugene Grosbein писал к Gennadij Pastuhov:
EG> Eugene
[ сожрали демоны ]
Огромное спасибо!
... Jonny wanna live
From: |
Stas Mishchenkov 2:460/5858 |
13 Jul 2019 23:18 +0300 |
To: |
Eugene Grosbein grosbein.net |
|
Subject: |
что я не так делаю?
|
Hi, Eugene!
10 июл 19 16:59, Eugene Grosbein -> Stas Mishchenkov:
AV>>>>> И на то, что ТС начисто проигнорировал рекомендации держать
AV>>>>> фидошный
AV>>>>> софт в локали KOI8-R.
SM>>>> Объясни простым языком, зачем нужна двойная перекодировка?
EG>>> Чтобы корректно работал софт, заточенный только под KOI8-R
EG>>> и который никто уже не будет переписывать под другие кодировки.
SM>> т.е. ты хочешь сказать, что если у меня перловый скрипт корректно
SM>> отрабатывает вот такой код: use locale;
SM>> @wrds = split(' ', $s_words);
SM>> foreach $w ( @wrds ) {
SM>> if ( $msgtext =~ /(.{0,10})\b($w)\b(.{0,10})/si ) {
SM>> print "Found: $1__$2__$3\n";
SM>> } else { print "\'$w\' not found.\n"; }
SM>> }
SM>> и при этом тот же код не работает в прелхуке HPT, то в KOI8-R все будет
SM>> работать и там?
EG> Без понятия, надо тестировать.
Вот и я думаю, что это глюк реализации пердла в HPT.
EG> Hо у меня есть код, который вынужден работать с данными в неизвестной
EG> внешней кодировке в отсутствие метаданных. В норме там обычно приходит
EG> windows-1251, но из-за багов может поступить сырой utf-8 и код
EG> обрабатывает оба случая, приводя всё к общему
EG> знаменателю. Исходные данные в переменной $tmp:
EG> # detect UTF-8 encoding, otherwise assume 8-bit windows-1251
EG> # Convert to internal Perl unicode
EG> $tmp = $s1 = utf8::decode($tmp) ? $tmp :
EG> Encode::decode('windows-1251', $s1, Encode::FB_PERLQQ);
EG> Можешь что-то подобное нарисовать и себе.
Но у меня-то кодировка выв базе известна.
EG> Hо у меня код работает *без* use locale (мне не надо делать word
EG> splitting).
А мне как раз нужно split и \b$word\b юзать, а для этого use locale;.
Have nice nights.
Stas Mishchenkov.
From: |
Eugene Grosbein grosbein.net |
11 Jun 2019 03:53 +0300 |
To: |
Michael Dukelsky 2:5020/1042 |
|
Subject: |
что я не так делаю?
|
10 июня 2019, понедельник, в 23:03 NOVT, Michael Dukelsky написал(а):
MD> $ locale
MD> LANG=ru_RU.UTF-8
utf8 это принципиально отличается от старых однобайтовых локалей,
поэтому требует ещё и use utf8;
Eugene
From: |
Eugene Grosbein grosbein.net |
18 Apr 2019 12:55 +0300 |
To: |
Michael Dukelsky 2:5020/1042 |
|
Subject: |
strif
|
17 апр. 2019, среда, в 14:15 NOVT, Michael Dukelsky написал(а):
EG>> @REPLY: 2:5020/932.1 5cb4c031
EG>> 15 апр. 2019, понедельник, в 18:31 NOVT, Mikhail Stakhanov написал(а):
MD> Хм. А у меня этого письма нет. :-( Я должен был его получить от 5020/4441.
Я
MD> единственный, кто не получил это письмо от /4441?
X-FTN-SEEN-BY: 50/16 109 250/25 450/1024 451/30 31 452/28 463/68 466/50 467/70
X-FTN-SEEN-BY: 469/122 5000/111 5001/100 5003/17 5005/49 5006/1 5010/275 352
5015/42
X-FTN-SEEN-BY: 5015/46 5019/42 5020/113 290 545 715 723 828 830 846 848 921 932
1042
X-FTN-SEEN-BY: 5020/1519 2047 2140 2332 3274 4441 9696 12000 5022/2 128 5023/24
X-FTN-SEEN-BY: 5026/49 99 5030/115 500 1081 5034/13 5036/26 5049/1 162 5051/44
X-FTN-SEEN-BY: 5053/57 5054/8 89 5055/37 5057/19 5059/37 5061/15 5064/56
5066/18
X-FTN-SEEN-BY: 5080/102 172 5083/1 444 5090/958 6090/1
X-FTN-PATH: 5020/932 715 4441 1042 5080/102
X-FTN-PATH: 5006/1
Eugene
--
For the Colonel's Lady an' Judy O'Grady
Are sisters under their skins!