Size: a a a

2021 January 26

OP

Oleg Pronin in Modern::Perl
К сожалению xsubpp древнее неудобное гавнище. даже с тюнингом от XS::I текущая кодогенерация для адаптера XS невозможна без перечисления. Вернее возможна с подачи с++ но тебе это не понравится))
источник

W

Warstone in Modern::Perl
Ага... А XS будет выглядеть как INCLUDE_COMMAND: g++ ./xs_gen/*.cpp xs_gen >/dev/null &2>1 && xs_gen Да?
источник

AK

Andrey Konovalov in Modern::Perl
Oleg Pronin
Хотя в данном случае экономия имхо не сильно велика
sub abc { state $abc = ABC->new }
VS
defers « abc » => « ABC »;

sub complex { state $obj = do { complex code...; Complex->new(args...) } }
VS
defers complex => sub { complex code...; Complex->new(args...) };

Экономия небольшая, на вкус и цвет
defers принимает на вход неограниченное количество пар, на том и экономия :)
источник

AK

Andrey Konovalov in Modern::Perl
Блин жалко, что никак вообще невозможно использовать переменную, впервые объявленную после объявления функции.
источник

AK

Andrey Konovalov in Modern::Perl
источник

AK

Andrey Konovalov in Modern::Perl
Даже так нельзя, хотя по сути функция определяется в момент вызова
источник

c

cono in Modern::Perl
~ perl -E 'sub f { my $x; say "init once"; *f = sub { $x //= 42; say $x }; goto &f }; f(); f()'
init once
42
42
источник

AK

Andrey Konovalov in Modern::Perl
cono
~ perl -E 'sub f { my $x; say "init once"; *f = sub { $x //= 42; say $x }; goto &f }; f(); f()'
init once
42
42
У меня такой кейс: нужно в конструктор объекта передать праметры командной строки, при этом eval конструктора делается раньше, чем появляется переменная my $opts. Но сделать так, чтобы код в eval "увидел" $opts невозможно.
источник

AK

Andrey Konovalov in Modern::Perl
В общем случае: нужно сделать функцию, которая эвалит код, содержащий отсылки к переменным, доступным в месте вызова функции, но не доступным в месте создания функции
источник

AK

Andrey Konovalov in Modern::Perl
я раньше полагал, что eval'у в общем пофиг, на то он и рантайм. Но нет
источник

c

cono in Modern::Perl
пахнет извратом
источник

AK

Andrey Konovalov in Modern::Perl
Хочу что-то типа: sub eval_this_shit { eval join ';' => @_ }
Но так не работает :)
источник

c

cono in Modern::Perl
чего не работает?
источник

c

cono in Modern::Perl
~ perl -E 'sub f { my $opts = {a => 42}; eval join ";" => @_}; f(@ARGV)' -- 'say $opts->{a}' '$opts->{b} = "hello"' 'say $opts->{b}'
42
hello
источник

VG

Vadim Goncharov in Modern::Perl
Переслано от Emmanuel Goldstein
`$=`;$_=\%!;($_)=/(.)/;$==++$|;($.,$/,$,,$\,$",$;,$^,$#,$~,$*,$:,@%)=(
$!=~/(.)(.).(.)(.)(.)(.)..(.)(.)(.)..(.)......(.)/,$"),$=++;$.++;$.++;
$_++;$_++;($_,$\,$,)=($~.$"."$;$/$%[$?]$_$\$,$:$%[$?]",$"&$~,$#,);$,++
;$,++;$^|=$";`$_$\$,$/$:$;$~$*$%[$?]$.$~$*${#}$%[$?]$;$\$"$^$~$*.>&$=`
источник

VG

Vadim Goncharov in Modern::Perl
это ответ сюда ^^^^
источник

c

crux in Modern::Perl
А кто чем пользуется для Sphinx? Sphinx::Search с cpan застрял на Sphinx-2.2.8 и, похоже не работает с третьим Sphinx
источник

AK

Andrey Konovalov in Modern::Perl
cono
~ perl -E 'sub f { my $opts = {a => 42}; eval join ";" => @_}; f(@ARGV)' -- 'say $opts->{a}' '$opts->{b} = "hello"' 'say $opts->{b}'
42
hello
BEGIN {
 sub f { eval q<say $x> }
}

my $x = 'hello';
f()
источник

SZ

Sergey Zhmylove in Modern::Perl
Andrey Konovalov
Блин жалко, что никак вообще невозможно использовать переменную, впервые объявленную после объявления функции.
Что ты имеешь ввиду?
источник

AK

Andrey Konovalov in Modern::Perl
Но это не работает и в случае без BEGINб в том числе если вообще подменять функцию в момент её первого вызова
источник