Search code examples
stringperlconcatenationwhitespace

Perl - Padding a string with whitespace and printing it


I have a string "A" and a string "B".

I want to add a certain amount of whitespace between A and B, then print it. I want the resulting print to be "A (lots of spaces here) B".

My idea is to pad "A" with whitespace to the right. I tried to accomplish this by:

$A .= (" " x 10)

then concatenate A and B, and print it.

However, this resulting print is "A \ \ \ \ \ \ \ \ \ \ B"

How do I get whitespace instead of these backslashes in my print? I'm not sure what I'm missing.


Solution

  • The code you posted does not produce the output you describe.

    $ perl -Mv5.14 -e'
       my $A = "A";
       my $B = "B";
       $A .= " " x 10;
       say $A . $B;
    '
    A          B
    

    If you know the amount of space you need, generating it using " " x 10 is quite appropriate.

    $ perl -Mv5.14 -e'say "A", " " x 10, "B";'
    A          B
    

    If instead, you know the size of the column, you could use printf.

    $ perl -Mv5.14 -e'say sprintf "%-10s %s", "A", "B";'
    A          B
    

    And there's also forms.

    $ perl -Mv5.14 -e'
      use Perl6::Form qw( form );
      print form "{<<<<<<<<} {<<<<<<<<}", "A", "B";
    '
    A          B