ОК, два очка:
1) Вы сказали «улучшить».
Несмотря на то, что «гольф-код» «крут» и, если он изучен и правильно применен, помогает разработчику расширить свои знания и уловить нюансы и глубины выбранного языка, результирующий гольф-код, в общем, НЕ являетсяулучшение с точки зрения разработки программного обеспечения.
Хотя хороший, элегантный код часто приводит к более короткой программе, обратное не обязательно (или обычно) верно.Наличие более короткого кода, скорее всего, означает, что код труднее читать и труднее поддерживать, и эти два качества имеют первостепенное значение для хорошей разработки программного обеспечения.
2) Сказав это, Perl обеспечиваетмножество синтаксических средств и идиом, которые улучшают код, сокращая его как побочный эффект.Я попытаюсь указать на некоторые возможные изменения в вашем коде, которые, на мой взгляд, сделают его более идиоматичным, хотя и не обязательно более коротким.
СТАРЫЙ:
my @input_arr = ();
push @input_arr, @$arr_ref;
NEW:
my @input_arr = (@$arr_ref);
Объяснение: Вам не нужно объявлять массив и инициализировать его отдельно.
OLD:
if (scalar(@input_arr) <= 1) {
NEW:
if (@input_arr <= 1) {
Объяснение: Массивы в Perl, при оценке в скалярном контексте (который накладывает оператор числового сравнения, такой как <=
), оценивают размер массива.Так что scalar()
- это лишнее.
Больше будет добавлено позже - нужно запустить