Надеюсь, тот, кто написал это, не является плодовитым.
Сколько способов сделать то же самое более понятным способом?
grep
grep фильтрует список иудаляет все, что возвращает false для условия проверки.Рассматриваемое текущее значение установлено на $_
, поэтому очень удобно использовать операторы проверки файлов.
Поскольку say
и print
оба хорошо обрабатывают списки строк, имеет смысл фильтровать выводперед передачей его им.
say grep -e, $base_name, "build/$base_name";
В старых perls без say
, map
иногда используется для применения новых строк к выходу до его печати.
print map "$_\n", grep -e, $base_name, "build/$base_name";
для
Здесь мы смело используем модификатор оператора if
.ИМХО, формы модификаторов операторов могут быть очень удобны, если LHS сохраняется очень просто .
для моего $ dir ($ base_name, "build / $ base_name") {print "$dir \ n "if -e $ dir;}
пунктуация
Все еще безобразно, как грех, но разрыв строки и использование некоторых дополнительных скобок помогает определить, что зацикливается, и отделить его от кода зацикливания.
-e && print("$_\n")
foreach( $base_name, "build/$base_name" );
Это лучше, но, пожалуйста, не делай этого.Если вы хотите сделать ($foo if $bar) for @baz;
DON "T . Используйте полноразмерный блок. Я могу посчитать один раз в моей жизни, когда было нормально использовать такую конструкцию $bar and $foo for @baz
, как эта, - и этобыло , вероятно, неправильно его использовать .
sub
Тайный код OP лучше, если он просто заключен в сабвуфер с хорошим именем.
Я напишу это самым уродливым способом, который я знаю, как:
sub print_existing_files { -e && print ("$_\n") foreach @_; }
Тело сабвуфера остается загадкой, но по крайней мере в названии есть какая-то подсказка.
Заключение
Я уверен, что пропустил много вариантов того, как это можно сделать (у меня нет ничего, что использует until
, и чертовски близко к тому, что не было намеренно запутано, было бы яснее).Но это не относится к делу.
Смысл этого в действительности состоит в том, чтобы сказать, что на любом языке есть много способов выполнить любую заданную задачу, поэтому важно, чтобы каждый программист, работающий в системе, оставалсяпомня о тех, кто следует.
Код существует для двух целей:общаться с будущими программистами и инструктировать компьютер, как работать - в таком порядке.