Size: a a a

2020 August 12

VO

Vyacheslav Olkhovche... in Modern::Perl
Andrei Protasovitski
Потому что delete говорят на элемент хэша или массива, а не на ключ.
ну так он же типа алиас в (@list). чем не элемент массива?
источник

SZ

Sergey Zhmylove in Modern::Perl
Vyacheslav Olkhovchenkov
ну так он же типа алиас в (@list). чем не элемент массива?
Тем, что это алиас на конкретный скаляр :р

perl -Mstrict -Mwarnings -le 'my@a=0..9;for(0..$#a){delete $a[$_] if $_%3}print for @a
источник

SZ

Sergey Zhmylove in Modern::Perl
Vyacheslav Olkhovchenkov
ну так он же типа алиас в (@list). чем не элемент массива?
И он алиас не на массив, а на элемент списка
источник

SZ

Sergey Zhmylove in Modern::Perl
Массив ≠ список
источник

SZ

Sergey Zhmylove in Modern::Perl
(в перл)
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
а чем это они отличаются?
источник

SZ

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

VO

Vyacheslav Olkhovche... in Modern::Perl
не понимаю, я к любому @list когда хотел обращался как $list[$i]
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
более того, нет объявления для массивов отличного от my @list
источник

SZ

Sergey Zhmylove in Modern::Perl
Vyacheslav Olkhovchenkov
не понимаю, я к любому @list когда хотел обращался как $list[$i]
@list это априори массив. У листа нету имени. Например (stat$file)[2]
источник

SZ

Sergey Zhmylove in Modern::Perl
Vyacheslav Olkhovchenkov
более того, нет объявления для массивов отличного от my @list
Этим тоже отличаются. Лист -- это просто элементы, положенные на стек
источник

SZ

Sergey Zhmylove in Modern::Perl
Vyacheslav Olkhovchenkov
более того, нет объявления для массивов отличного от my @list
Кстати говоря, массив можно ещё кучей способов объявить. Даже без рефлексии
источник

AP

Anton Petrusevich in Modern::Perl
Vyacheslav Olkhovchenkov
а почему несмотря на то что $_ в foreach типа alias на него нельзя сказать delete?
delete may also be used on arrays and array slices, but its behavior is less straightforward. Although exists will return false for deleted entries, deleting array elements never changes indices of existing values; use shift or splice for that. However, if any deleted elements fall at the end of an array, the array's size shrinks to the position of the highest element that still tests true for exists, or to 0 if none do. In other words, an array won't have trailing nonexistent elements after a delete.

WARNING: Calling delete on array values is strongly discouraged. The notion of deleting or checking the existence of Perl array elements is not conceptually coherent, and can lead to surprising behavior.
источник

AP

Anton Petrusevich in Modern::Perl
наверное, потому, что дилит на элементы массива имеет очень мало смысла
источник

VG

Vadim Goncharov in Modern::Perl
но таки имеет, например, если массив tied
источник

AT

Artem Tepponen in Modern::Perl
Я вот не понимаю, зачем в обычных ситуациях использовать хоть и красивые конструкции, но вызывающие реакцию WTF. KISS principle лучше всего в коде, который надо поддерживать
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
а есть разница между $x = \@list; и $x = [@list]; ?
источник

AP

Andrei Protasovitski in Modern::Perl
Vyacheslav Olkhovchenkov
а есть разница между $x = \@list; и $x = [@list]; ?
Конечно:
perl -MData::Dumper -e 'my @list = (0..9); my $l1 = \@list; my $l2 = [@list]; push @list, 10; print Dumper { 1 => $l1, 2 => $l2 };'
источник

AT

Artem Tepponen in Modern::Perl
Во втором случае копия
источник

AP

Andrei Protasovitski in Modern::Perl
Artem Tepponen
Во втором случае копия
И, соответственно, второй случай значительно медленней.
источник