Perl форматирование печати - PullRequest
3 голосов
/ 22 июня 2011

Я хотел бы отформатировать (усечь / добавить с помощью символов) строку до указанной длины при печати на Perl.

Например,

$string='my_string';
printf("%04s",$string);

должен печатать

my_s

также если

$string='my';

Я должен получить

00my

Есть ли способ напечатать последние четыре символа?

ring

и если строка

$string='my';

должно быть напечатано

00my

Ответы [ 2 ]

13 голосов
/ 23 июня 2011

Вы хотите сделать эту строку формата вместо вашей:

printf ("%04.4s", $string);

Вам нужен .4, потому что это определяет максимальную длину.(4 в начале указывает только минимум)

вот вывод некоторых тестов:

$ perl -e "my \$string = \"my_string\";print sprintf(\"%04.4s\", 22);"
0022
$ perl -e "my \$string = \"my_string\";print sprintf(\"%04.4s\", \$string);"
my_s
$ perl -e "my \$string = \"my\";print sprintf(\"%04s\", \$string);"
00my

Вот вывод с использованием неверной строки формата.Как видите, строки не усекаются.

$ perl -e "my \$string = \"my_string\";print sprintf(\"%04s\", 22);"
0022
$ perl -e "my \$string = \"my_string\";print sprintf(\"%04s\", \$string);"
my_string
3 голосов
/ 23 июня 2011
printf('%04s', substr($_, 0, 4));
...