Я хотел бы ответить на этот вопрос с помощью
Чтобы получить все причудливое форматирование Perl и ключевой доступ к хеш-данным, вы нужна (лучшая версия этой) функция:
# sprintfx(FORMAT, HASHREF) - like sprintf(FORMAT, LIST) but accepts
# "%$" instead of "%$" in FORMAT to access the
# values of HASHREF according to . Fancy formatting is done by
# passing '%', to sprintf.
sub sprintfx {
my ($f, $rh) = @_;
$f =~ s/
(%%) # $1: '%%' for '%'
| # OR
% # start format
(\w+) # $2: a key to access the HASHREF
\$ # end key/index
( # $3: a valid FORMAT tail
# 'everything' upto the type letter
[^BDEFGOUXbcdefginosux]*
# the type letter ('p' removed; no 'next' pos for storage)
[BDEFGOUXbcdefginosux]
)
/$1 ? '%' # got '%%', replace with '%'
: sprintf( '%' . $3, $rh->{$2}) # else, apply sprintf
/xge;
return $f;
}
, но мне стыдно за рискованный/грубый подход к захвату «хвоста» строки формата.
Итак: существует ли регулярное выражение для строки FORMAT, которому можно доверять?