Size: a a a

2020 October 06

W

Warstone in Modern::Perl
Лучше проверять фаил все-таки.
источник

SZ

Sergey Zhmylove in Modern::Perl
Alexey Stavrov
Меня бы это устроило. Нет необходимости понимать, что файл обновился.
Не поделитесь?
Ты бы свою задачу описал
источник

AS

Alexey Stavrov in Modern::Perl
Я хотел в однострочнике эту возможность, но в однострочнике код не выполняется с B::Deparse.
Если через отдельный файл, то как можно в B::Deparse весь package main положить как функцию (через coderef2text)?
источник

AS

Alexey Stavrov in Modern::Perl
Если отдельный файл, то можно будет open $0 сделать, но это как-то неинтересно...
источник

AS

Alexey Stavrov in Modern::Perl
Alexey Stavrov
Я хотел в однострочнике эту возможность, но в однострочнике код не выполняется с B::Deparse.
Если через отдельный файл, то как можно в B::Deparse весь package main положить как функцию (через coderef2text)?
В однострочнике тоже можно использовать coderef2text. Т.е. в однострочнике можно выполнить код с B::Deparse)
источник

SZ

Sergey Zhmylove in Modern::Perl
Alexey Stavrov
В однострочнике тоже можно использовать coderef2text. Т.е. в однострочнике можно выполнить код с B::Deparse)
Ты что ли сам с собой разговариваешь? :))
источник

AS

Alexey Stavrov in Modern::Perl
Sergey Zhmylove
Ты что ли сам с собой разговариваешь? :))
Что за провакация? Я просто поправил себя.

Раньше использовал deparse только так: perl -MO=Deparse ... Так код исполняться не будет.
источник

SZ

Sergey Zhmylove in Modern::Perl
Alexey Stavrov
Что за провакация? Я просто поправил себя.

Раньше использовал deparse только так: perl -MO=Deparse ... Так код исполняться не будет.
Ну так то не B, а O
источник

AS

Alexey Stavrov in Modern::Perl
Верно
источник

AS

Alexey Stavrov in Modern::Perl
Мне вообще-то удалось сделать, после того, как я прочитал код модуля O.
источник

AS

Alexey Stavrov in Modern::Perl
$ cat 6.pl 
#!/bin/env perl
use v5.20;
use B::Deparse;

my $output;
open(my $outHandle, '>', \$output) or die;
my $oldHandle = select $outHandle;

my $compilesub = B::Deparse::compile();
&$compilesub();

select $oldHandle;
close $outHandle;


say 'BEGIN!';
say $output;
say 'END!';
источник

AS

Alexey Stavrov in Modern::Perl
Оказалось, что у B::Deparse есть функция compile. Это есть в документации по модулю O (в самом низу), но я видимо никогда не дочитывал до туда.
Вообщем в исходниках модуля O нашёл ответ.

Но мне решение как-то не очень нравится... Столько кода. Нету элегантности.
источник

AS

Alexey Stavrov in Modern::Perl
Выше умные дядьки видимо писали про это, говоря про декомпиляцию, но я их не понял.
источник

DS

Dmitriy Shamatrin in Modern::Perl
+
источник

AG

Anatolia Gr in Modern::Perl
В ограниченных объёмах можно так:
$_ = <DATA>;
seek *DATA, 0, 0;
print(<DATA>);
__DATA__
источник

AG

Anatolia Gr in Modern::Perl
Alexey Stavrov
Выше умные дядьки видимо писали про это, говоря про декомпиляцию, но я их не понял.
А зачем это тебе? Как то не могу придумать причину для этого кода
источник

AS

Alexey Stavrov in Modern::Perl
Anatolia Gr
А зачем это тебе? Как то не могу придумать причину для этого кода
Ну в кратце я готовлю подарок на ДР)
источник

AG

Anatolia Gr in Modern::Perl
Если perl -d тебя не смущает, то дока: https://perldoc.perl.org/perldebguts#Debugger-Internals
Пример:
BEGIN {
   no strict;
   for my $k (sort keys %main::) {
       next if $k =~ m/::\z/;
       next if $k !~ m/^_</;

       say $k;
       print grep defined, @{"$k"};
       $|=1;
   }
   syscall 60, 0; # POSIX::exit(0);
}
запускать через perl -d « название скрипта »
источник

b

basiliscos in Modern::Perl
Подскажите, плз., модуль для поточного разжатия GZIP. Желательно в corelist ? Хотелось бы что-то вроде

my $gz = ..->new('/path/to/file.gz');
while(my $chunk = $gz->uncompress(2048)) {
...
}
источник

YK

Yegor K in Modern::Perl
IO::Uncompress::Gunzip
источник