В Perl есть функции printf и sprintf, которые иногда бывают очень удобны в работе.
Пример:
printf('Hello, %s.', 'Bob'); # выводет на экран строку 'Hello, Bob.'
Разница между printf и sprintf заключается в том что printf выводит результат на экран, а sprintf возвращает значение. Это возвращаемое значение можно, например, сохранить в переменной:
my $bar = sprintf('Hello, %s.', 'Bob');
# теперь в переменной $bar содержится строка 'Hello, Bob.'
%s — это плейсхолдер, который просто подставляет вместо себя значение, но есть более интересные плейсхолдеры, некоторые из которых можно настраивать. Примеры:
# добавить нули перед числом
sprintf('%03d', 7); # 007
sprintf('%03d', 70); # 070
sprintf('%03d', 700); # 700
sprintf('%03d', 7000); # 7000
# округлисть число до нужной точности
sprintf('%0.2f', 3.1415926); # 3.14
sprintf('%0.3f', 3.1415926); # 3.142
sprintf('%0.4f', 3.1415926); # 3.1416
# перевести десятичное число в двоичное
sprintf('%b', 123); # 1111011
sprintf('%05b', 2); # 00010
# перевести десятичное число в восьмеричное
sprintf('%o', 8); # 10
sprintf('%o', 100); # 144
# перевести десятичное число в шестнадцатеричное
sprintf('%x', 255); # 'ff'
sprintf('%X', 255); # 'FF'
В плейсхолдере %s тоже можно указывать числа. И еще можно указать знак минус, чтобы выравнивание было по левому краю (эту фичу очень удобно использовать для того чтобы выводить данные в виде таблиц). Пример:
say '1234567890 1234567890';
say sprintf '%10s %10s', 'asdf', 'asdf';
say sprintf '%-10s %-10s', 'asdf', 'asdf';
Это выведет на экран:
1234567890 1234567890
asdf asdf
asdf asdf
Кроме этого у плейсхолдера %s есть интересная возможность менять порядок:
sprintf('%s - %s', 'one', 'two'); # 'one - two'
sprintf('%2$s - %1$s', 'one', 'two'); # 'two - one'
Полная документация про эти функции есть на сайте perldoc.perl.org:
5 мая 2015