dil: (Default)
dil ([personal profile] dil) wrote2007-03-02 02:14 pm

Удивительный язык perl

офигенно понятный.
Вот попробуйте, не глядя в комменты и документацию, определить, чтО делает эта конструкция
push(@foo,[@bar]);
Способа написать это понятнее я не нашел.

[identity profile] dkfl.livejournal.com 2007-03-02 02:27 pm (UTC)(link)
ссылку на анонимный массив положить в @foo.

[identity profile] schors.livejournal.com 2007-03-02 02:31 pm (UTC)(link)
А чего тут думать, в конец массива @foo добавляется ссылка на анонимный массив, элементы которого совпадают с элементами массива @bar

[identity profile] schors.livejournal.com 2007-03-02 02:32 pm (UTC)(link)
> элементы которого совпадают с элементами массива @bar

скажу более по-русски - в анонимом массиве копия @bar на момент операции.

[identity profile] b-a-t.livejournal.com 2007-03-02 03:30 pm (UTC)(link)
+1

[identity profile] dma.livejournal.com 2007-03-02 04:27 pm (UTC)(link)
Ссылку на массив оно в массив пихает.
Remedies: пользоваться ссылками сразу.
типа, push (@$foo, $bar), where $bar = [1, 2, 3];

Либо, насколько помню, push (@foo, \@bar);

Но вообще, в перле я пришёл года два назад к идее использовать ТОЛЬКО ссылки, и $a->[]/$a->{}

Не нужно думать, и скобки очень хорошо различимы визуально.

[identity profile] dil.livejournal.com 2007-03-02 04:34 pm (UTC)(link)
\@bar делает немножко не то, что мне надо. Так у меня весь @foo окажется набитым ссылками на один и тот же @bar. А мне надо на его копии в разные моменты времени, я в него данные снаружи много раз считываю

[identity profile] dma.livejournal.com 2007-03-05 03:07 am (UTC)(link)
В этом случае лучше сразу создавать анонимный массив, читать в него и присваивать потом. Меньше копирований.
allter: (Default)

[personal profile] allter 2007-03-07 08:00 am (UTC)(link)
Не надо пытаться перехитрить Perl и JavaVM... Они и так неплохо оптимизируют... В частности, в Perl не стоит избегать передач параметров в функции и обратно через списки.

А передача ссылок на хэши/списки и потом их произвольная и несогласованная их модификация в функциях - это прямой путь программистов на C создать глючную и трапающуюся в произвольные моменты программу.

[identity profile] dmarck.livejournal.com 2007-03-02 06:58 pm (UTC)(link)
Не ссылку, а копию, и тем-то от \@bar и отличается.

[identity profile] dma.livejournal.com 2007-03-05 03:10 am (UTC)(link)
Да, протупил.

а в чём проблема-то?

[identity profile] erra.livejournal.com 2007-03-02 06:45 pm (UTC)(link)
конструкция непонятна только тому, кто язык не знает ;>

[identity profile] duke-igthorn.livejournal.com 2007-03-02 07:41 pm (UTC)(link)
Почему-то ассоциации вызвали в памяти асм пдп11. Я понимаю, что это другое и о другом...

[identity profile] dil.livejournal.com 2007-03-02 08:11 pm (UTC)(link)
Да, лаконичностью напоминает. Двойная косвенная адресация..

[identity profile] behe.livejournal.com 2007-03-02 11:28 pm (UTC)(link)
Саша, возвращайся. :)

[identity profile] dil.livejournal.com 2007-03-03 11:49 pm (UTC)(link)
А что, вы уже изобрели какой-то более другой перл? ;)
allter: (Default)

[personal profile] allter 2007-03-07 07:54 am (UTC)(link)
Что здесь такого сложного? В конец @foo дописать элемент, представляющий ссылку на анонимный список, содержащий значения списка @bar.
allter: (Default)

[personal profile] allter 2007-03-07 08:13 am (UTC)(link)
(опоздал ;-) )

[identity profile] k-g-b.livejournal.com 2007-03-08 09:49 pm (UTC)(link)
Саш, не кури больше. :-))))))))))))

[identity profile] blacklion.livejournal.com 2007-04-11 03:16 pm (UTC)(link)
А в чём проблема? В @foo добавится ссылка на безымянный массив с содерждимым, скопированным из @bar.