Тема: perl
Показать сообщение отдельно
  #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.

--- Хороший собеседник не только внимательно слушает, но и вовремя наливает.
Ответить с цитированием