Я печатаю строку, требующую форматирования. Я хотел бы printf с заданным количеством символов, которые я сохранил в другой переменной, но я не уверен, как это сделать.

my $max_len = max map length, keys %hash;
printf ("%s %s\n", $string1, ":$string2");

Очевидно, это выводит string1 :string2, но я хочу, чтобы общая ширина первого столбца была $ max_len. Как я могу это сделать?

0
sfr 18 Июн 2020 в 23:41

1 ответ

Лучший ответ

%-4s будет дополнять значение пробелами до тех пор, пока оно не займет четыре символа.

my $max_len = max map length, keys %hash;

for my $key (keys(%hash)) {
    printf("%-{$max_len}s %s\n", $key, $hash{$key})
}

Вы можете использовать *, чтобы указать printf использовать параметр в качестве ширины поля.

my $max_len = max map length, keys %hash;

for my $key (keys(%hash)) {
    printf("%*s %s\n", -$max_len, $key, $hash{$key})
}

Или

my $max_len = max map length, keys %hash;

for my $key (keys(%hash)) {
    printf("%-*s %s\n", $max_len, $key, $hash{$key})
}
1
ikegami 18 Июн 2020 в 20:48