Size: a a a

2020 June 21

b

basiliscos in Modern::Perl
ничего не понял из объяснения.

-> % perl -E 'my $v = 5; my $s = sub { $v }; $v = 6; print $s->(), "\n"'
6
-> % perl -E 'my $v = 5; my $s = sub { return $v }; $v = 6; print $s->(), "\n"'
6
источник

b

basiliscos in Modern::Perl
тут поведение одинаковое, захват делается по ссылке, вроде всё ок.
источник

b

basiliscos in Modern::Perl
Sergey Zhmylove
Если бы был написан return, то перл бы так не делал.

Особый смак, когда люди пишут отображающий функционал, который потом из-за этой детали ломает их логику:
sub x { return unless defined $_[0]; $_[0] * 4 } say for map x($_), 2, undef, 4, 5;
да, про scalar/list context в случае отсутвия ретурна, известно и понятно.
источник

b

basiliscos in Modern::Perl
в случае если вместо $v будет %h то поведение такое же
источник

AP

Anton Petrusevich in Modern::Perl
Sergey Zhmylove
Типа смотри такой код:
my %h; for my $z (4..6) { %h = (%h, map { $z . $_ => sub {print $_[0], $_, $z}} (1..3))}
print $_, $h{$_}->($_), "\n" for keys %h;
чёт я не понял как он связан с ретурном. он тут просто про замыкания
источник

b

basiliscos in Modern::Perl
я тоже вот
источник

b

basiliscos in Modern::Perl
my %h;
for my $z (2..2) {
 %h = (%h, map {
   $z . $_ => sub {
           print "(a:", $_[0], ", b: ", $_, ", z: ", $z, ")"
       }
   } (1..1))
}
print "k = ", $_, ", val = ", $h{$_}->($_), "\n" for keys %h;



вот проще. Замыкается $z, и всё ок с ним

(a:21, b: 21, z: 2)k = 21, val = 1


(про замыкания @_ отдельная песня, т.к. это спец. переменная к сути вопроса  не относится
источник

AP

Anton Petrusevich in Modern::Perl
по твоему вопросу, мне думается, там слишком мало в перлдельте написали. как я понимаю, sub () { $val} — псевдоописание константы, а если добавить директиву ретурн, то это уже функция. но времени вчитаться пока нет.
источник

AP

Anton Petrusevich in Modern::Perl
угу:
Traditionally, Perl has captured the value of the variable
at that point and turned the subroutine into a constant
eligible for inlining.
источник

b

basiliscos in Modern::Perl
Anton Petrusevich
по твоему вопросу, мне думается, там слишком мало в перлдельте написали. как я понимаю, sub () { $val} — псевдоописание константы, а если добавить директиву ретурн, то это уже функция. но времени вчитаться пока нет.
а-а-а. Тогда да, выглядет правдоподобно )
источник

AP

Anton Petrusevich in Modern::Perl
источник

b

basiliscos in Modern::Perl
сейчас надо онлайнер с примером соорудить, чтобы убедиться
источник

IB

Ivan Bessarabov in Modern::Perl
Sergey Zhmylove
@bessarabov давай быстрее добавим 5.32 в твоего бота и сравним вывод для кода выше :)
Добавил 5.32 на сайт https://PerlBanjo.com

Телеграм бот использует полселднюю версию с сайта, так что в боте теперь тоже 5.32
источник

IB

Ivan Bessarabov in Modern::Perl
@PerlBanjoBot

print $^V;
источник

P

PerlBanjoBot in Modern::Perl
источник

b

basiliscos in Modern::Perl
👍👍
источник

МК

Михаил Козачков... in Modern::Perl
@PerlBanjoBot

$^V='v5.34.0';
источник

P

PerlBanjoBot in Modern::Perl
Modification of a read-only value attempted at script.pl line 10.
https://PerlBanjo.com/8eddd53018
источник

МК

Михаил Козачков... in Modern::Perl
Всё честно)
источник

AP

Anton Petrusevich in Modern::Perl
A new experimental infix operator called isa tests whether a given object is an instance of a given class or a class derived from it


блин, а in когда внедрят таки? после выпиливания смартматча только листутилсы остались...
источник