Perl 右侧带破折号的sprintf垫线

Perl 右侧带破折号的sprintf垫线,perl,printf,Perl,Printf,我需要在右边用破折号('-')填充一个字符串。e、 g.将'M'转换为'M-----' sprintf“%-6s”,“M”给我'M'。我尝试了printf“%-6-s”,“M”,和printf“%--6s”,“M”,但这两个都不起作用 这可以用sprinf来完成吗?如果可以,怎么做?单用sprintf是做不到的。(sprintf将只填充空格或零。) 或 或 单靠sprintf是做不到的。(sprintf将只填充空格或零。) 或 或 sprintf仅支持使用0和填充,因此不支持。您可以使用其中一个

我需要在右边用破折号('-')填充一个字符串。e、 g.将
'M'
转换为
'M-----'

sprintf“%-6s”,“M”
给我
'M'
。我尝试了
printf“%-6-s”,“M”,和
printf“%--6s”,“M”,但这两个都不起作用


这可以用
sprinf
来完成吗?如果可以,怎么做?

单用
sprintf
是做不到的。(
sprintf
将只填充空格或零。)


单靠
sprintf
是做不到的。(
sprintf
将只填充空格或零。)


sprintf
仅支持使用
0
填充,因此不支持。您可以使用其中一个填充,然后替换填充,但问题是,您可能会替换原始字符串中的任何填充字符。例如
sprintf('%-6s',M')=~s/-/gr
产生
--M---

从:

如果您需要使用空白或零以外的字符填充,您可以 使用以下方法之一。它们都生成一个带有 使用
x
操作符并将其与
$text
组合。这些方法并不适用 截断
$text

使用任意字符左右填充,创建新字符串:

my $padded = $pad_char x ( $pad_len - length( $text ) ) . $text;
my $padded = $text . $pad_char x ( $pad_len - length( $text ) );
左右填充任意字符,直接修改
$text

substr( $text, 0, 0 ) = $pad_char x ( $pad_len - length( $text ) );
$text .= $pad_char x ( $pad_len - length( $text ) );
如果您经常这样做,您可以将其包装在一个子例程中

sub pad {
    my ($str, $padding, $length) = @_;

    my $pad_length = $length - length $str;
    $pad_length = 0 if $pad_length < 0;
    $padding x= $pad_length;
    $str.$padding;
}

say pad('M',       '-', 6);
say pad('MMMMMM',  '-', 6);
say pad('12345',   '-', 6);
say pad('1234567', '-', 6);
say pad('    ',    '-', 6);

sprintf
仅支持使用
0
填充,因此不支持。您可以使用其中一个填充,然后替换填充,但问题是,您可能会替换原始字符串中的任何填充字符。例如
sprintf('%-6s',M')=~s/-/gr
产生
--M---

从:

如果您需要使用空白或零以外的字符填充,您可以 使用以下方法之一。它们都生成一个带有 使用
x
操作符并将其与
$text
组合。这些方法并不适用 截断
$text

使用任意字符左右填充,创建新字符串:

my $padded = $pad_char x ( $pad_len - length( $text ) ) . $text;
my $padded = $text . $pad_char x ( $pad_len - length( $text ) );
左右填充任意字符,直接修改
$text

substr( $text, 0, 0 ) = $pad_char x ( $pad_len - length( $text ) );
$text .= $pad_char x ( $pad_len - length( $text ) );
如果您经常这样做,您可以将其包装在一个子例程中

sub pad {
    my ($str, $padding, $length) = @_;

    my $pad_length = $length - length $str;
    $pad_length = 0 if $pad_length < 0;
    $padding x= $pad_length;
    $str.$padding;
}

say pad('M',       '-', 6);
say pad('MMMMMM',  '-', 6);
say pad('12345',   '-', 6);
say pad('1234567', '-', 6);
say pad('    ',    '-', 6);

sprintf(“%-6s”,“M”)=~tr||-r
sprintf(“%6s”,“M”)=~tr||-r将我介绍给“x”操作员的奖励积分。在使用perl的10年中,我从未见过这种情况,现在我感觉自己像个新手。为我介绍“x”操作符,我获得了额外的积分。在使用perl的10年中,我从未见过这种情况,现在我感觉自己像个新手。
M-----
MMMMMM
12345-
1234567
    --