forum.wfido.ru  

Вернуться   forum.wfido.ru > Прочие эхи > RU.HUSKY

Ответ
 
Опции темы Опции просмотра
  #1  
Старый 23.10.2016, 01:50
Stas Mishchenkov
Guest
 
Сообщений: n/a
По умолчанию perl

Stas Mishchenkov написал(а) к All в Oct 16 00:38:32 по местному времени:

Нi, All!

sub route
{
if ( $text =~ /\r\x01%RouteTo\: (\d+\:\d+\/\d+)\r/i) {
( $routeto ) = ( $1 );
$text =~ s/\x01%RouteTo\:/\x01Routed To/s;
$change=1;
$$flavour = "direct";
$route = $routeto;
}

return $route;
}

По чему все равно роутится с флавором Нold? ЧЯНТД?

Нave nice nights.
Stas Mishchenkov.

--- Если ложка не стоит в сметане, очевидно, виновата не ложка!
Ответить с цитированием
  #2  
Старый 23.10.2016, 14:41
Michael Dukelsky
Guest
 
Сообщений: n/a
По умолчанию perl

Michael Dukelsky написал(а) к Stas Mishchenkov в Oct 16 13:32:32 по местному времени:

Привет, Stas!

23 Oct 16 00:38, Stas Mishchenkov послал(а) письмо к All:

SM> sub route
SM> {
SM> if ( $text =~ /\r\x01%RouteTo\: (\d+\:\d+\/\d+)\r/i) {
SM> ( $routeto ) = ( $1 );
SM> $text =~ s/\x01%RouteTo\:/\x01Routed To/s;
SM> $change=1;
SM> $$flavour = "direct";
SM> $route = $routeto;
SM> }

SM> return $route;
SM> }

SM> По чему все равно роутится с флавором Нold? ЧЯНТД?

1. В строчке ( $routeto ) = ( $1 ); скобки лишние. Достаточно написать
$routeto = $1;
2. В строчке $$flavour = "direct"; слишком много долларов. :) Надо
$flavour = "direct";
3. Ну и, вообще говоря, переменная $routeto лишняя.

Желаю успехов, Stas!
За сим откланиваюсь, Michael.

... node (at) f1042 (dot) ru
--- GoldED+/LNX 1.1.5-b20151128
Ответить с цитированием
  #3  
Старый 27.10.2016, 02:11
Stas Mishchenkov
Guest
 
Сообщений: n/a
По умолчанию perl

Stas Mishchenkov написал(а) к Michael Dukelsky в Oct 16 16:08:04 по местному времени:

Нi, Michael!

23 окт 16 13:32, Michael Dukelsky -> Stas Mishchenkov:

SM>> sub route
SM>> {
SM>> if ( $text =~ /\r\x01%RouteTo\: (\d+\:\d+\/\d+)\r/i) {
SM>> ( $routeto ) = ( $1 );
SM>> $text =~ s/\x01%RouteTo\:/\x01Routed To/s;
SM>> $change=1;
SM>> $$flavour = "direct";
SM>> $route = $routeto;
SM>> }

SM>> return $route;
SM>> }

SM>> По чему все равно роутится с флавором Нold? ЧЯНТД?

MD> 1. В строчке ( $routeto ) = ( $1 ); скобки лишние. Достаточно написать
MD> $routeto = $1;

Но значение переменной не меняется же? Просто там было больше переменных в черновике...

if ( $text =~ /\r\x01%RouteTo\: (\d+\:\d+\/\d+) at (\d+\:\d+\/\d+)\r/i)

MD> 2. В строчке $$flavour = "direct"; слишком много долларов. :) Надо
MD> $flavour = "direct";

О! Спасибо. Копипаста подвела. :(

MD> 3. Ну и, вообще говоря, переменная $routeto лишняя.

Опять же, в черновике болше кода, $1 уже не то, а значение еще нужно, да, и читабельней код получается.

Нave nice nights.
Stas Mishchenkov.

SEEN-BY: 46/12 50/15 240/1120 250/25 451/30 455/19 460/57 58 777 1124 461/48
SEEN-BY: 461/58 463/68 822 877 1104 1113 1124 1331 3232 466/50 466 469/418
SEEN-BY: 4600/140 4614/20 4624/8 4641/222 5000/111 5005/49 5010/352 5015/42 46
SEEN-BY: 5019/40 42 400 5020/101 113 290 545 570 620 715 723 814 828 830 846
SEEN-BY: 5020/848 849 921 961 982 1042 1067 1853 2047 2140 2992 3274 4096 4441
SEEN-BY: 5020/5452 5480 8080 8181 12000 5022/5 128 5023/24 5028/63 5029/32
SEEN-BY: 5030/115 830 1474 5034/13 5037/28 5042/13 5050/55 151 5051/41 5052/4
SEEN-BY: 5053/7 54 57 58 5054/89 5057/19 70 5060/900 5061/15 5064/56 5068/45
SEEN-BY: 5075/35 5083/444 6001/10 6035/1 6056/1 6070/109 6090/1
Ответить с цитированием
  #4  
Старый 07.12.2018, 17:18
Brother Rabbit
Guest
 
Сообщений: n/a
По умолчанию perl

Brother Rabbit написал(а) к All в Dec 18 15:00:52 по местному времени:

Нi, All!

[fido@BroRabbit]$ uname -a
Linux BroRabbit.localdomain 4.9.71-std-def-alt0.M80P.1 #1 SMP Thu Dec 21 01:27:05 UTC 2017 x86_64 GNU/Linux

НPT распоследний.

вставляю в filter.pl код:

sub filter()
{

$uuedir = "\/home\/fido\/uue";
# директория, в которой складывать ююки.
if ($area =~ /RU\.SEX\.SIMVOL/i) {
if ( $text =~ /\rbegin 644[ ]+([^ \r]+)\r.*end\r/si ){
my $ofile = "$uuedir\/$1";
w_log("uue of \"$ofile\" found.");
if (open(F, ">$ofile\.uue")){
print(F $text);
close(F);
system("uudecode -o $ofile $ofile\.uue");

#> -------------------------^^^^^^^ не срабатывает. Так и должно быть или
#> я где-то ошибся?

w_log("Dcoded \"$ofile\" from Area \"$area\".");
} else {
w_log("Can't open \"$ofile\.uue\"\: $!\.");
}
}
}

}

Нave nice nights.
Brother Rabbit.

--- Коньки и ласты - что суждено отбросить, того уже не склеишь...
Ответить с цитированием
  #5  
Старый 08.12.2018, 12:31
Michael Dukelsky
Guest
 
Сообщений: n/a
По умолчанию perl

Michael Dukelsky написал(а) к Brother Rabbit в Dec 18 21:23:30 по местному времени:

Привет, Brother!

07 Dec 18 15:00, Brother Rabbit послал(а) письмо к All:

BR> вставляю в filter.pl код:

BR> sub filter()
BR> {
BR> $uuedir = "\/home\/fido\/uue";
BR> # директория, в которой складывать ююки.
BR> if ($area =~ /RU\.SEX\.SIMVOL/i) {
^^^^^^^^^^^^^^^^^^^^^
Поскольку эха вроде бы одна, достаточно if(lc($area) eq "ru.sex.simvol")

BR> if ( $text =~ /\rbegin 644[ ]+([^ \r]+)\r.*end\r/si ){
BR> my $ofile = "$uuedir\/$1";
BR> w_log("uue of \"$ofile\" found.");
BR> if (open(F, ">$ofile\.uue")){
BR> print(F $text);
BR> close(F);
BR> system("uudecode -o $ofile $ofile\.uue");
#>> -------------------------^^^^^^^ не срабатывает. Так и должно быть
#>> или я где-то ошибся?

Вроде бы никаких принципиальных запретов нет. У меня system() в filter.pl срабатывает. Но надо указать полный путь к uudecode. Если паче чаяния и это не сработает, то попробуй такой фокус:

my @args = ("/path/to/uudecode", "-o", "$ofile", "$ofile\.uue");
system(@args);

Желаю успехов, Brother!
За сим откланиваюсь, Michael.

... node (at) f1042 (dot) ru
--- GoldED+/LNX 1.1.5-b20170303
Ответить с цитированием
  #6  
Старый 08.12.2018, 13:13
Brother Rabbit
Guest
 
Сообщений: n/a
По умолчанию perl

Brother Rabbit написал(а) к Michael Dukelsky в Dec 18 11:18:06 по местному времени:

Нi, Michael!

07 дек 18 21:23, Michael Dukelsky -> Brother Rabbit:

BR>> sub filter()
BR>> {
BR>> $uuedir = "\/home\/fido\/uue";
BR>> # директория, в которой складывать ююки.
BR>> if ($area =~ /RU\.SEX\.SIMVOL/i) {

MD> ^^^^^^^^^^^^^^^^^^^^^
MD> Поскольку эха вроде бы одна, достаточно if(lc($area) eq "ru.sex.simvol")

Ну, да. Так, видимо, быстре будет.

BR>> if ( $text =~ /\rbegin 644[ ]+([^ \r]+)\r.*end\r/si
BR>> ){
BR>> my $ofile = "$uuedir\/$1";
BR>> w_log("uue of \"$ofile\" found.");
BR>> if (open(F, ">$ofile\.uue")){
BR>> print(F $text);
BR>> close(F);
BR>> system("uudecode -o $ofile $ofile\.uue");
#>>> -------------------------^^^^^^^ не срабатывает. Так и должно быть
#>>> или я где-то ошибся?

MD> Вроде бы никаких принципиальных запретов нет. У меня system() в
MD> filter.pl срабатывает.

Вот в этом я и сомневался.

MD> Но надо указать полный путь к uudecode.

Скорее всего в этом дело. Похоже, не наследуются переменные окружения.

MD> Если паче чаяния и это не сработает, то попробуй такой фокус:

MD> my @args = ("/path/to/uudecode", "-o", "$ofile", "$ofile\.uue");
MD> system(@args);

Спасибо. Попробую.

Нave nice nights.
Brother Rabbit.

--- У одних людей, полушария прикрываются костями черепа, у других - штанами.
Ответить с цитированием
  #7  
Старый 08.12.2018, 13:22
Brother Rabbit
Guest
 
Сообщений: n/a
По умолчанию perl

Brother Rabbit написал(а) к Michael Dukelsky в Dec 18 12:02:00 по местному времени:

Нi, Michael!

07 дек 18 21:23, Michael Dukelsky -> Brother Rabbit:

MD> my @args = ("/path/to/uudecode", "-o", "$ofile", "$ofile\.uue");
MD> system(@args);

Я пошел другим путем. ;)

=== Import Windows Clipboard Start ===
my $uudecoded_data = "";
if ( $text =~ /\rbegin 644[ ]+([^ \r]+)\r(.*\r)end\r/i ){
$ofile = "$uuedir\\$1";
$uuelines = $2;
open(F, ">>$ofile");
binmode(F);
while( $uuelines =~ /^([^ \r]+\r)/ ){
$uudecoded_data = unpack("u", $1);
print(F $uudecoded_data);
$uuelines =~ s/^[^\r]+\r//;
}
close(F);
}
=== Import Windows Clipboard End ===

Здесь, видимо, нужно еще проверять $ofile на наличие и если он уже есть, выбирать другое имя или удалять старый.

Нave nice nights.
Brother Rabbit.

--- Если ложка не стоит в сметане, очевидно, виновата не ложка!
Ответить с цитированием
  #8  
Старый 08.12.2018, 14:02
Michael Dukelsky
Guest
 
Сообщений: n/a
По умолчанию perl

Michael Dukelsky написал(а) к Brother Rabbit в Dec 18 12:48:02 по местному времени:

Привет, Brother!

08 Dec 18 12:02, Brother Rabbit послал(а) письмо к Michael Dukelsky:

MD>> my @args = ("/path/to/uudecode", "-o", "$ofile", "$ofile\.uue");
MD>> system(@args);

BR> Я пошел другим путем. ;)

А полный путь указать не пробовал?

BR> === Import Windows Clipboard Start ===
BR> my $uudecoded_data = "";
BR> if ( $text =~ /\rbegin 644[ ]+([^ \r]+)\r(.*\r)end\r/i ){
BR> $ofile = "$uuedir\\$1";
BR> $uuelines = $2;
BR> open(F, ">>$ofile");
BR> binmode(F);
BR> while( $uuelines =~ /^([^ \r]+\r)/ ){
BR> $uudecoded_data = unpack("u", $1);
BR> print(F $uudecoded_data);
BR> $uuelines =~ s/^[^\r]+\r//;
BR> }
BR> close(F);
BR> }
BR> === Import Windows Clipboard End ===

Судя по binmode(F), это винда. А в винде как раз без приведённого мной выше фокуса system() не работает.

BR> Здесь, видимо, нужно еще проверять $ofile на наличие и если он уже
BR> есть, выбирать другое имя или удалять старый.

Да. А после open() написать or ... и дальше ругнуться в лог и прекратить обработку.

Желаю успехов, Brother!
За сим откланиваюсь, Michael.

... node (at) f1042 (dot) ru
--- GoldED+/LNX 1.1.5-b20170303
Ответить с цитированием
  #9  
Старый 08.12.2018, 17:06
Brother Rabbit
Guest
 
Сообщений: n/a
По умолчанию perl

Brother Rabbit написал(а) к Michael Dukelsky в Dec 18 14:25:04 по местному времени:

Нi, Michael!

08 дек 18 12:48, Michael Dukelsky -> Brother Rabbit:

MD>>> my @args = ("/path/to/uudecode", "-o", "$ofile", "$ofile\.uue");
MD>>> system(@args);

BR>> Я пошел другим путем. ;)

MD> А полный путь указать не пробовал?

Нет. Я решил сразу разъююкивать, т.к. вызывать из скрипта бинарь, что бы потом за ним еще ююки удалять, мне показалось не удобно.

BR>> === Import Windows Clipboard Start ===

[...skipped...]

BR>> === Import Windows Clipboard End ===

MD> Судя по binmode(F), это винда.

Да. Под виндой оно без binmode разъююки ломает.

MD> А в винде как раз без приведённого мной выше фокуса system() не
MD> работает.

Не работало в альтлинуксе. wget, кстати, из обычного перлового скрипта нормально вызывается и там, и там именно так, как я делал с uudecode.

BR>> Здесь, видимо, нужно еще проверять $ofile на наличие и если он уже
BR>> есть, выбирать другое имя или удалять старый.

MD> Да. А после open() написать or ... и дальше ругнуться в лог и прекратить
MD> обработку.

Сдедлал вот так:

=== 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 $ofile = "$uuedir\/" . uc($area) ."\/$1";
mkdir "$uuedir\/" . uc($area) if !-e "$uuedir\/" . uc($area);
my $i = 0;
while (-e $ofile) {
$ofile = "$uuedir\/".uc($area)."\/".sprintf("%08x", time()).sprintf("%02d",$i)."$1";
$i++;
if ($i > 255) {
$ofile = "$uuedir\/" . uc($area) ."\/$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 ===

На линуксовой машине работает. Разъююкивает и по директориям раскладывает.

Нave nice nights.
Brother Rabbit.

--- Хороший собеседник не только внимательно слушает, но и вовремя наливает.
Ответить с цитированием
  #10  
Старый 08.12.2018, 17:06
Michael Dukelsky
Guest
 
Сообщений: n/a
По умолчанию perl

Michael Dukelsky написал(а) к Brother Rabbit в Dec 18 14:46:12 по местному времени:

Привет, Brother!

08 Dec 18 14:25, Brother Rabbit послал(а) письмо к Michael Dukelsky:

MD>> А полный путь указать не пробовал?

BR> Нет. Я решил сразу разъююкивать, т.к. вызывать из скрипта бинарь, что
BR> бы потом за ним еще ююки удалять, мне показалось не удобно.

Ну, в общем-то это ты правильно решил.

[...skipped...]
BR> Сдедлал вот так:

BR> === Import Windows Clipboard Start ===

BR> $uuedir = "\/home\/fido\/uue";
BR> # директория, в которой складывать разююки.
BR> if (defined($area)) {
BR> if ( $text =~ /\rbegin 644[ ]+([^ \r]+)\r(.*\r)end\r/i ){
BR> @uuelines = split(/\r/,$2);
BR> my $ofile = "$uuedir\/" . uc($area) ."\/$1";
BR> mkdir "$uuedir\/" . uc($area) if !-e "$uuedir\/" .
BR> uc($area);
BR> my $i = 0;
BR> while (-e $ofile) {
BR> $ofile = "$uuedir\/".uc($area)."\/".sprintf("%08x",
BR> time()).sprintf("%02d",$i)."$1";
BR> $i++;
BR> if ($i > 255) {
BR> $ofile = "$uuedir\/" . uc($area)
BR> ."\/$1";
BR> unlink($ofile);
BR> }
BR> }
BR> # w_log("uue of \"$ofile\" found.");
BR> if (open(F, ">>$ofile")){
BR> binmode(F);
BR> foreach my $val ( @uuelines ){
BR> $uudecoded_data = unpack("u", $val);
BR> print(F $uudecoded_data);
BR> }
BR> close(F);
BR> # w_log("Dcoded \"$ofile\" from Area
BR> \"$area\".");
BR> } else {
BR> w_log("Can't open \"$ofile\"\: $!\.");
BR> }
BR> }
BR> }

BR> === Import Windows Clipboard End ===

BR> На линуксовой машине работает. Разъююкивает и по директориям
BR> раскладывает.

Прекрасно. Можно ещё несколько раз встречающийся текст "$uuedir\/" . uc($area) в самом начале записать в переменную.

Желаю успехов, Brother!
За сим откланиваюсь, Michael.

... node (at) f1042 (dot) ru
--- GoldED+/LNX 1.1.5-b20170303
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 17:23. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2019, vBulletin Solutions, Inc. Перевод: zCarot