Если вы действительно не любите печатать или слишком длинные строки, не используйте стрелки, когда они вам не нужны. Подписи рядом с подписками подразумевают ссылки, поэтому компетентный программист не нуждается в дополнительных ключах, чтобы понять это.
Я не согласен с тем, что более удобные для чтения дополнительные стрелки. Совершенно нетрадиционно, когда они отодвигают интересные части этого термина друг от друга.
В Промежуточном Perl , где мы фактически преподаем ссылки, мы просим вас опустить ненужные стрелки.
Кроме того, помните, что не существует такой вещи, как "читабельность". Есть только то, что вы (и другие) научили свои глаза распознавать как шаблоны. Вы не читаете вещи посимвольно, а потом выясняете, что они значат. Вы видите группы вещей, которые вы видели раньше, и узнаете их. На базовом уровне синтаксиса, о котором вы говорите, ваша «читаемость» - это просто ваша способность распознавать шаблоны. Чем проще вы используете шаблоны, тем легче распознать их, поэтому неудивительно, что то, что вы делаете сейчас, более «читабельно» для вас. Поначалу новые стили кажутся странными, но со временем становятся более узнаваемыми и, следовательно, более «читабельными».
Пример, который вы приводите в своих комментариях, не сложно прочитать, потому что в нем отсутствуют стрелки. Стрелками все еще трудно читать:
$expr1->[$sub1{$x}]{$sub2[$y]-33*$x3}{24456+myFunct($abc)}
$expr1->[$sub1{$x}]->{$sub2[$y]-33*$x3}->{24456+myFunct($abc)}
Я пишу такой код, используя эти типы имен переменных, чтобы напомнить следующему кодеру о типе контейнера для каждого уровня:
my $index = $sub1{$x};
my $key1 = $sub2[$y]-33*$x3;
my $key2 = 24456+myFunct($abc);
$expr1->[ $index ]{ $key1 }{ $key2 };
Чтобы сделать это еще лучше, спрячьте детали в подпрограмме (вот для чего они предназначены :), чтобы вам никогда не приходилось играть с этим беспорядком в структуре данных напрямую. Это более читабельно, чем любой из них:
my $value = get_value( $index, $key1, $key2 );
my $value = get_value(
$sub1{$x},
$sub2[$y]-33*$x3,
24456+myFunct($abc)
);