LINUX.ORG.RU

[perl] Как бы не повторяться лишний раз

 


0

0

Есть вот такая конструкция.

delete $genre{0};
delete $date{0};
delete $performer{0};
delete $title{0};
delete $index_00{0};
delete $index_01{0};
delete $pregap{0};

Работает, но выглядит как-то не очень опрятно. Да и будь этих хешей несколько больше возникли бы проблемы. Ключ у этих хешей один и тот же. Нельзя ли этот процесс автоматизировать?

★★★★★

Тебе так и так придётся перечислять все хэши. Даже если их загнать в массив а потом пройтись через map. В итоге приведённый тобой способ самый короткий :-)

Anoxemian ★★★★★
()
Ответ на: комментарий от Anoxemian

Не, не короче, потому как если количество увеличится сильно, то и строк будет гораздо больше, а если использовать твой вариант с массивом и мапом, то достаточно добавить в массив новый элемент, что согласись проще :)

Cy6erBr4in ★★★
()

можно подойти с другой стороны -- в перле то можно делать составные объекты -- скажем, элементами хэша могут быть хэши (вернее ссылки на хэши).

dilmah ★★★★★
()

delete $_->{0} for \%genre \%date \%performer \%title \%index_00 \%index_01 \%pregap;

Не шибко короче, короче.

anonymous
()

Судя по постановке задачи, идейно правильнее было бы что-то типа

$track{0} = {
title => '',
performer => '',
...
};

и далее delete $track{0};

То, что раньше было $performer{0}, станет, соответственно, $track{0}->{performer}, ну и т.д.

lodin ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.