Size: a a a

2021 July 28

AK

Andrey Konovalov in Modern::Perl
Кстати, интересно, а если вместо переменных использовать lvalue - функции - это ж наверное круто будет? Можно будет не писать сигилы!
источник

AK

Andrey Konovalov in Modern::Perl
Пишешь такой var = 'value', но на самом деле то не var, а lvalue-функция!
источник

SZ

Sergey Zhmylove in Modern::Perl
А потом $hash{var}
источник

GK

Grigoriy Koudrenko in Modern::Perl
а var будет возвращать какую то state или глобальную переменную?
источник

SZ

Sergey Zhmylove in Modern::Perl
Что напишешь, то и будет
источник

GK

Grigoriy Koudrenko in Modern::Perl
Ну я к тому что для локальных переменных такой подход уже будет не применим
источник

SZ

Sergey Zhmylove in Modern::Perl
Почему это?
источник

GK

Grigoriy Koudrenko in Modern::Perl
ну так имя функции будет глобально для всего namespace, т.е. грубо говоря
{ my $x; sub var : lvalue { $x } }
sub foo { var = 'foo';  ... }
sub bar { var = 'bar';  ... }

в обоих случаях и foo и bar будут ссылаться на одну и ту же переменную
источник

SZ

Sergey Zhmylove in Modern::Perl
Смотря как создавать функции. Есть же my sub
источник

SZ

Sergey Zhmylove in Modern::Perl
Можно их замыкать на локальные переменные
источник

SZ

Sergey Zhmylove in Modern::Perl
И тогда будет вести как нужно
источник

GK

Grigoriy Koudrenko in Modern::Perl
Ого, а их уже завезли и не под experimental?
источник

SZ

Sergey Zhmylove in Modern::Perl
А чо, не умеешь отключать experimental warning-и? :))
источник

SZ

Sergey Zhmylove in Modern::Perl
Кстати можно и без my sub. Они всё равно для скоупа локальны будут
источник

GK

Grigoriy Koudrenko in Modern::Perl
Да знаю я конечно как их отключать,  а так же и стрелять себе в ногу, когда при обновлении перла  ломают поведение )
источник

GK

Grigoriy Koudrenko in Modern::Perl
не, без my sub не будут
источник

SZ

Sergey Zhmylove in Modern::Perl
Надо только с помощью кейвордов сделать удобный интерфейс. Чтобы оно var name превращало в my $name; sub name() :lvalue {$name}
источник

SZ

Sergey Zhmylove in Modern::Perl
Это как это?
источник

GK

Grigoriy Koudrenko in Modern::Perl
Ты это имеешь в виду?:
sub foo {                           
   my $v;  sub var : lvalue { $v; }
   var = 'foo';                    
   say var;                        
}                                  
                                   
sub bar {                          
   my $v; sub var : lvalue { $v; }
   var = 'bar';                    
   foo;                            
   say var;                        
}                                  
                                   
bar
источник

GK

Grigoriy Koudrenko in Modern::Perl
Вот такой код не валиден, а вот если сделать в нем my sub то все будет работать корректно
источник