From: |
Eugene Grosbein grosbein.net |
04 Apr 2019 17:54 +0300 |
To: |
Mikhail Stakhanov 2:5020/932.1 |
|
Subject: |
еще 1.
|
03 апр. 2019, среда, в 17:23 NOVT, Mikhail Stakhanov написал(а):
MS> Hе могу сообразить как отпрезать:
MS> ($key,$desc) =($1,$2) if ($_ =~ /^(.*?)\s(.*+)(\s|#|;)?+$/);
MS> ^^^^^
MS> вот здесь:
MS> $1 до 1го пробела
MS> $2 до последнего пробела или конца строки
MS> если есть #что то или ;что-то то это отрезать
MS> строка вида:
MS> Inboud /var/.... # Что-то не берется...
Во-первых, $_ =~ /.../ никогда писать не надо, так как
$_ используется по дефолту и лучше просто писать if /.../;
Оператор =~ применяет /.../ к указанной недефолтной переменной
и он не нужен в случае $_.
Во-вторых: /^(.+?)\s+([^#;\s]+)/
То есть, в начале идёт непустая строка до первого пробела,
затем один или более пробелов, затем вторая строка матчится жадно,
но в неё не включаются пробелы, решетки и точка с запятой,
то есть матчинг закончится перед такими символами, если они есть.
И если дальше там что-то есть - оно нас никак не интересует и мы
этот хвост даже матчить не будем.
Eugene
From: |
Eugene Grosbein grosbein.net |
18 Jul 2019 18:00 +0300 |
To: |
Stas Mishchenkov 2:460/5858 |
|
Subject: |
что я не так делаю?
|
18 июля 2019, четверг, в 09:27 NOVT, Stas Mishchenkov написал(а):
SM>>> Между тем мой эмпириокритицизм позволил мне все-таки найти корень
SM>>> проблемы. #!/usr/bin/perl use POSIX; use locale; 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: С".
EG>> 90% за то, что система запускает бинарник без выставления локали.
SM> Гм. Он у меня действительно по крону запускается от имени пользователя
fido, у
SM> которого, впрочем, локаль установлена нужная.
Если не делать отдельных телодвижений, то локаль вместе со всем окружением
наследуется от процесса-родителя, в данном случае от крона.
Поменяй строку запуска "команда" на:
env LC_ALL=ru_RU.IBM866 команда
Eugene
From: |
Mikhail Stakhanov 2:5020/932.1 |
06 Apr 2019 01:55 +0300 |
To: |
Mikhail Stakhanov 2:5020/932.1 |
|
Subject: |
в чем ошибка ?
|
Здравствуйте, Mikhail!
Ответ на сообщение Mikhail Stakhanov (2:5020/932.1) к All, написанное 06
апр 19 в 01:38:
Сорри вопрос снят, наверное надо спать идти! конечно же $files{$tmp}="$i";
>>> !!! %files{$tmp} = "$i";
Всего наилучшего, Mikhail
From: |
Mikhail Stakhanov 2:5020/932.1 |
22 Apr 2019 13:00 +0300 |
To: |
Eugene Grosbein grosbein.net |
|
Subject: |
помогите!!!
|
Здравствуйте, Eugene!
Ответ на сообщение Eugene Grosbein (2:5006/1) к Mikhail Stakhanov,
написанное 21 апр 19 в 19:31:
вот это работает:
>---=== Куть он "msrif.pl" ===---
begin 644 msrif.pl
M(R$O=7-R+V)I;B]P97)L"@IM>2`D87)G(#T@)$%21U9;,%T["B,@
2!H879E('-E=F5R86P@;&EN97,I"B,@4V%Y+"!Y;W4@
M:&%V92!A;&EAPH@("`@(R!B=6EL9"!F:6QE(&QI
M7!E(&8@,CXO9&5V+VYU;&P@?"!G&ET(#$@:68@*"`A("US("1A
M2P@)'9A;"`I(#T@&ET(#$@
M:68@*"`D4U))1DE[("=R97%U97-T;&ES="<@?2!E<2`D4U))1DE[("=R97-P
M;VYS96QIR`G+UQ<+R\G("UE("=S+UPD+UPD
M+R<@?"!G+RLO)R`^("134DE&27L@)W)E&ET(&EF("@@(2`M9"`D86QI87-E
M'0@:68@*"`D9B`]?B`O6UPJ7#]<+UTO("D["B`@
M("`D9B`]("1A;&EA+RLO)R`^/B`D4U))1DE[
C("=R97-P;VYS96QI&ET.PH`
`
end
>---=== Куть офф "msrif.pl" ===---
А вот это нет:
>---=== Куть он "strif.pl" ===---
begin 644 strif.pl
M(R$O=7-R+V)I;B]P97)L"@HC(%-T('-R:68@9G)E<2!P2!3
M>7-O<"!O9B`R.C4P,C`O.3,R0&9I9&]N970*"G5S92!S=')I8W0["G5S92!W
M87)N:6YG2`D=7-A9V4@/2`\/"`G14]4)SL*"E5S86=E('-T'AX*3L*
M"2UI(#T@8G5I;&0@:6YD97@["@H)9FEL96-O;F9I9R`]('!U="!I="!I;B!S
M8W)I<'0["@ER971U'AX('=I=&@@86QL(&9O=6YD(&9I;&5S
M.PH*14]4"B,@(2$@T)?0L-"\T+70O=&/T+70O"#0M]"TT+71@=&,(-"ZT+#1
M@M"PT+O0OM"ST+@@T+_0OM"T(-&!T+70L=&/("$A"FUY("1B87-E7V1I2`D:6YD97A?9&ER/21B87-E7V1I2`D
M;&]G7V9I;&4](G-TPH);7D@*"1F:6QE;F%M92D]0%\["@EM>2`H)&ME>2PD9&5S
M8RD["@EM>2`E:V5YPH)"6EF("@D7R`A?B!M+UX[?",K
M+RD@>PH)"0DH)&ME>2PD9&5S8RD@/2@D,2PD,BD@:68@*"1?(#U^("]>*"XJ
M/RE\R@N*BLI)"\I.PH)"0DD:V5Y7,["GT*"B,@T831@]"]
MT+K1AM"XT8\@T+?0L-"_T+C1@="X(-"R(-"[T+[0LPIM>2`E8V]N9FEG/2@I
M.PIS=6(@=U]L;VPH)9&EE("+0GM&(T+C0L="ZT+`@)"$@T+_1@-"X
M(-"^T8+0NM&`T8O1@M"XT+@@T830L-"YT+O0L"`D;&]G7V9I;&4B"@D)=6YL
M97-S(&]P96X@3$]'+"`B/CXB+"(D8V]N9FEG>VQO9V1I"@D*2![
M(`H);7D@)&)?9&ER(#T@7"Y\?"!I9B`D7D\@/7X@
M+TU35VEN+SL*"6UY("1F:6YD7W)U;&4@/2!&:6QE.CI&:6YD.CI2=6QE+3YN
M97<["@H))&9I;F1?T8C0N-"QT+K0L"#0OM&"T+K1@-&+
MT8+0N-&/(-&$T+#0N="[T+`@)&EN9&5X7V1IPH)=U]L;V"@D8V]N9FEG>VEN9&5X9&ER?2D@.PH)=U]L;V2!`9FEL97-?9&ER.PH);7D@)69I;&5S
M/2@I.PH);7D@)&D],#L*"69OR$O7EPN+R`F)B`M9B`B)&1IR1F:6QEPH)
M"61E;&5T92`D9FEL97-[)&ME>7T@:68@*"$D=F%L=64I.PH)?0H)"0H);7D@
M0&9I;&5S7VQE='1E2`D:V5Y("AS;W)T(&ME
M>7,@)69I;&5S*2!["@D)"6EF("@D:V5Y(#U^("]>)&QE='1ER1F:6QE3L)"@D)"0D))&9I;&5S7VQE='1ER1K97E]6R1I73L*"0D)"7T*"0D)"21O=71?:6YD("L]
M)&-O=6YT.PH)"0D)(W!R:6YT("(D9FEL97-?;&5T=&5R6R1O=71?:6YD75M=
M7&XB.PH)"0H)"0E]"@D)?0H)"6EF("@D;W5T7VEN9"`A/2`P*2!["@D)"6]P
M96X@1DE,12P@(CXB+"(D:6YD97A?9&ER(BXB"(@;W(@9&EE(")#86XG="!C2`D:3TP.R`D:3Q`9FEL97-?;&5T=&5R.R1I*RLI('L*"0D)"0EP2`D2DL*"1T;2T^;6]N*2LQ+"@D=&TM/GEE87(I
M*S$Y,#`I*3L*"7=?;&]G*")297%U97-T(&9R;VT@04M!.B`DW-Y2!`<&%R=',@/2`H
M*3L*"6UY("5D:7)S(#TH*3L*"69O%]D:7(B+B)D:7)S+FQS="(I.PH)"6UY("1D7V9O
M=6YD(#T@*"D["@D);7D@)&-US%]+V<@:68@*"1F:6QES%]+V<@:68@*"1F:6QE%]D:7(B+B)S
M=')?(BXD<&%R='-;,%TN(BYI9'@B(&]R(&1I92`BPH)"0DH)&-U2`HPH)"0D)"0D)"21F:6QEW)E2`D:2`](#`[("1I(#P@PH)"0EC:&]M<"@D9FEL97-?9F]U;F1;)&E=*3L*
M"0D)(W-YW)E<75ER=R97-P;VYS96QI7-T96T@(F-P("UF("1SW)ER=R97-P;VYS96QI&ET.P``
`
end
>---=== Куть офф "strif.pl" ===---
в чем ошибка ?
Всего наилучшего, Mikhail
From: |
Brother Rabbit 2:460/5858 |
09 Jun 2019 16:11 +0300 |
To: |
Michael Dukelsky 2:5020/1042 |
|
Subject: |
что я не так делаю?
|
Hi, Michael!
09 июн 19 14:18, Michael Dukelsky -> Brother Rabbit:
BR>> $words = 'по закону';
BR>> @wrds = split(" ", $words);
BR>> foreach $w ( @wrds ) {
BR>> $found = 0 if $text ~= /$w/i;
BR>> }
BR>> Находит "по новому закону", "попа закону", "гипопотам не указ закону".
BR>> Цель же найти тролько слово целиком.
MD> Не совсем понял, что ты хочешь.
MD> #!/usr/bin/perl
MD> my $words = "по закону";
MD> my $text = "гипопотам закону не указ";
MD> my @wrds = split(" ", $words);
MD> my $found = 0;
MD> foreach my $w ( @wrds )
MD> {
MD> print "w = $w\n";
MD> if($text =~ /$w/i)
MD> {
MD> $found = 1;
MD> last;
MD> }
MD> }
MD> print "found = $found\n";
MD> Находит "по" в слове "гипопотам". Это то, что ты хотел?
Наоборот. Я хотел, что бы находилось только "по", но не "гипопотам".
#!/usr/bin/perl
use locale;
[...skipped...]
if ( defined( $words ) ) {
$found = 1;
@wrds = split(" ", $words);
foreach $w ( @wrds ) {
$found = 0 if $msgtext !~ /[\.\, \t\r]${w}[\.\, \t\r]/i;
}
}
[...skipped...]
Вот так вылавливает слово целиком, но не слова, его содержащие. Однако, эта
конструкция [\.\, \t\r] не эквивалентна \b. Между тем, у меня острое ощущение,
что при таком использовании \b транслируется не в границу слова, а в символ Back
Space.
Have nice nights.
Brother Rabbit.
From: |
Stas Mishchenkov 2:460/5858 |
18 Jul 2019 09:27 +0300 |
To: |
Eugene Grosbein grosbein.net |
|
Subject: |
что я не так делаю?
|
Hi, Eugene!
17 июл 19 18:27, Eugene Grosbein -> Stas Mishchenkov:
SM>> Между тем мой эмпириокритицизм позволил мне все-таки найти корень
SM>> проблемы. #!/usr/bin/perl use POSIX; use locale; 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: С".
EG> 90% за то, что система запускает бинарник без выставления локали.
Гм. Он у меня действительно по крону запускается от имени пользователя fido, у
которого, впрочем, локаль установлена нужная.
Have nice nights.
Stas Mishchenkov.
From: |
Eugene Grosbein grosbein.net |
16 Jan 2019 03:15 +0200 |
To: |
Gennadij Pastuhov 2:5036/26 |
|
Subject: |
XML::Xerces
|
15 янв. 2019, вторник, в 18:35 NOVT, Gennadij Pastuhov написал(а):
GP> Кто-нибудь юзает сабж? Как можно его установить в последнем debian 9?
Инструкцию по сборке-то читал? http://xerces.apache.org/xerces-p/
Ставишь xerces-c3, прописываешь переменные как в инструкции,
а потом как любой непакетированный перловый модуль:
perl Makefile.PL && make && make test && make install
Или рисуешь пакет сам.
Eugene
From: |
Eugene Grosbein grosbein.net |
10 Jul 2019 16:59 +0300 |
To: |
Stas Mishchenkov 2:460/5858 |
|
Subject: |
что я не так делаю?
|
10 июля 2019, среда, в 09:53 NOVT, Stas Mishchenkov написал(а):
AV>>>> И на то, что ТС начисто проигнорировал рекомендации держать фидошный
AV>>>> софт в локали KOI8-R.
SM>>> Объясни простым языком, зачем нужна двойная перекодировка?
EG>> Чтобы корректно работал софт, заточенный только под KOI8-R
EG>> и который никто уже не будет переписывать под другие кодировки.
SM> т.е. ты хочешь сказать, что если у меня перловый скрипт корректно
отрабатывает
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> работать и там?
Без понятия, надо тестировать. Hо у меня есть код, который вынужден
работать с данными в неизвестной внешней кодировке в отсутствие метаданных.
В норме там обычно приходит windows-1251, но из-за багов может поступить
сырой utf-8 и код обрабатывает оба случая, приводя всё к общему знаменателю.
Исходные данные в переменной $tmp:
# detect UTF-8 encoding, otherwise assume 8-bit windows-1251
# Convert to internal Perl unicode
$tmp = $s1 = utf8::decode($tmp) ? $tmp :
Encode::decode('windows-1251', $s1, Encode::FB_PERLQQ);
Можешь что-то подобное нарисовать и себе.
Hо у меня код работает *без* use locale (мне не надо делать word splitting).
Eugene
--
Устав от вечных упований,
Устав от радостных пиров
From: |
Mikhail Stakhanov 2:5020/932.1 |
06 Apr 2019 01:38 +0300 |
To: |
All |
|
Subject: |
в чем ошибка ?
|
Здравствуйте, All!
----
my @files_dir;
my %files={};
my $i=0;
foreach my $dir (@dirs) {
opendir(DIR, $dir) or die "can't open $!";
@files_dir = grep !/^\.\.?$/, readdir DIR;
close DIR;
print join ("\n",@files_dir);
foreach my $tmp (@files_dir) {
$tmp=decode("cp1251",$tmp) if $^O =~ /MSWin/;
>>!!! %files{$tmp} = "$i";
}
$i++;
----
Can't modify key|value hash slice in list assignment at ...pl line !!!, near
""$i";"
с @dirs все нормально!
нужно %files = ( filename => i(номер директории))
Всего наилучшего, Mikhail
From: |
Gennadij Pastuhov 2:5036/26 |
30 Jan 2019 17:33 +0200 |
To: |
All |
|
Subject: |
hash, продолжение
|
Рад всех приветствовать! А особенно - All!
Встретил сегодня такую конструкцию:
my $handler = {
owner_changed => 'process_owner_changed',
changed => 'process_changed',
created => 'process_created',
}->{$event};
Здесь что, внутренний массив является ключом хэша?
... Jonny wanna live