День 2: Красота Форматирования
Представляю перевод на русский язык второй статьи (Day 2: The beauty of formatting) цикла Perl 6 Advent Calendar. Статья посвящена форматированию в Perl 6.
Разворачиваем второй подарок, который принёс нам на рождество Perl 6, и находим… метод с именем .fmt.
Если вы знакомы со sprintf, то будете чувствовать себя как дома с .fmt. Если же вы не знаете про sprintf или же знаете недостаточно, то подробности можно узнать на соответствующей странице perldoc. Хоть она и длинная, не углубляйтесь. Просто наслаждайтесь этим.
Вернемся к .fmt, храброй младшей сестре sprintf. Вот несколько способов использования .fmt для форматирования строк и чисел:
say 42.fmt('%+d') # '+42'
say 42.fmt('%4d') # ' 42'
say 42.fmt('%04d') # '0042'
say :16<1337f00d>.fmt('%X') # '1337F00D'
Все это хорошо и замечательно, но не более чем короткая форма sprintf. Большое дело, верно?
Я еще не рассказал вам, что метод .fmt перегружен и работает по-разному на массивах (или точнее на списках):
say <huey dewey louie>.fmt # 'huey dewey louie'
say <10 11 12>.fmt('%x') # 'a b c'
say <1 2 3>.fmt('%02d', '; ') # '01; 02; 03'
Кроме того, .fmt так же переопределен и на хэшах:
say { foo => 1, bar => 2 }.fmt # 'foo 1
# bar 2'
say { Apples => 5, Oranges => 10 }.fmt('%s cost %d euros')
# 'Apples cost 5 euros
# Oranges cost 10 euros'
say { huey => 1, dewey => 2, louie => 3 }.fmt('%s', ' -- ')
# 'huey -- dewey -- louie'
При работе с хешами результат может выводиться в другом порядке, отличном от представленного выше. Ах да, и там .fmt так же перегружен для пар, но это работает аналогично и для одной. (прим. переводчика: не понял смысла последнего предложения, просьба поправить)
.fmt является маленьким полезным инструментом, когда вам нужно изменить некоторое значение, или массив, или хеш в некотором заданном формате. Это как sprintf, только еще для массивов и хешей.
В этом есть только одна проблема: Perl 6 может подпортить репутацию семейства языков Perl как ужасно читаемых. Для противостояния этой опасности, я оставлю маленький прощальный подарок в форме простой, но густой рождественской ели, написанной на Perl 6 в одну строку:
$ perl6 -e 'say " "x 9-$_,"#"x$_*2-1 for 0..9,2 xx 3'
#
###
#####
#######
#########
###########
#############
###############
#################
###
###
###