How can I repeat a string N times in Perl?

68,015

Solution 1

$ perl -e 'print "4" x 4; print "\n"'
4444

The x operator is documented in perldoc perlop. Here binary means an operator taking two arguments, not composed of bits, by the way.

Binary "x" is the repetition operator. In scalar context or if the left operand is not enclosed in parentheses, it returns a string consisting of the left operand repeated the number of times specified by the right operand. In list context, if the left operand is enclosed in parentheses or is a list formed by "qw/STRING/", it repeats the list. If the right operand is zero or negative, it returns an empty string or an empty list, depending on the context.

       print '-' x 80;             # Print row of dashes

       print "\t" x ($tab/8), ' ' x ($tab%8);      # Tab over

       @ones = (1) x 80;           # A list of 80 1’s
       @ones = (5) x @ones;        # Set all elements to 5

perl -e is meant to execute Perl code from the command line:

$ perl --help
Usage: perl [switches] [--] [programfile] [arguments]
  
  -e program     one line of program (several -e's allowed, omit programfile)

Solution 2

In Perl, you want to use the "x" operator.

Note the difference between

"4" x 4

and

("4") x 4

The former produces a repeated string:

"4444"

the latter a repeated list:

("4", "4", "4", "4")

Solution 3

It's very similar in Perl

print "4" x 4;

Solution 4

FWIW, it’s also print 4 x 4 in Perl.

In general, in Perl, operators are monomorphic, ie. you have different sets of operators for string semantics, for numeric semantics, for bitwise semantics, etc., where it makes sense, and the type of the operands largely doesn’t matter. When you apply a numeric operator to a string, the string is converted to a number first and you get the operation you asked for (eg. multiplication), and when you apply a string operator to a number, it’s turned into a string and you get the operation you asked for (eg. repetition). Perl pays attention to the operator first and the types of the operands only second – if indeed it pays them any mind at all.

This is the opposite of Python and most other languages, where you use one set of operators, and the types of the operands determine which semantics you’ll actually get – ie. operators are polymorphic.

Solution 5

If you want to print 10 character "A"s, you can also do this

perl -e 'print "A" x 10'; echo

Example with output

user@linux:~$ perl -e 'print "A" x 10'; echo
AAAAAAAAAA
user@linux:~$ 
Share:
68,015
izb
Author by

izb

Twitter: http://twitter.com/izb

Updated on February 19, 2022

Comments

  • izb
    izb about 2 years

    In Python, if I do this:

    print "4" * 4
    

    I get

    > "4444"
    

    In Perl, I'd get

    > 16
    

    Is there an easy way to do the former in Perl?

  • Grey Panther
    Grey Panther over 15 years
    Just a remark - it may not be clear to all perl users (especially the new ones) what the -e option does, so it would be better to provide direct code example (as Paul's response does).
  • jfs
    jfs over 15 years
    perl -Esay+4x4 Here, '-E' enables 'use 5.010' (particularly - the 'say' feature). say "$var" is the same as print "$var\n". In scalar context the 'x' operator always returns a string, so there is no need to use quotes here.
  • jfs
    jfs over 15 years
    In Perl 6 the x operator always returns string (left operand is evaluated in a string context e.g., 4x4 -> "4"x4 -> "4444"), xx - a repeat op for lists e.g., 4xx4 -> (4)xx4 -> (4,4,4,4).
  • Vinko Vrsalovic
    Vinko Vrsalovic over 15 years
    Now that would be confusing :-)
  • Vinko Vrsalovic
    Vinko Vrsalovic over 15 years
    The fact you can doesn't mean you should, necessarily. I think that making intentions clear makes the code more readable for everybody. Omitting quotes makes it less readable to my eyes.
  • Axeman
    Axeman over 15 years
    And no reason to use double quotes, to pile on the picky.
  • Jacob
    Jacob over 15 years
    I would like to see the reason, for the differences, to be cited in this answer. The reason is that, in Perl you can treat a string as a number, and it will automatically become a number.
  • Vinko Vrsalovic
    Vinko Vrsalovic over 15 years
    I have a reason to use quotes, readability and intent. The fact you can omit them doesn't mean you have to (or even should).
  • Aristotle Pagaltzis
    Aristotle Pagaltzis over 15 years
    a) Did you see anything in my answer about what you should or should not do? (This 4 x 4 is unlikely to show up in real Perl code verbatim anyway.) b) If it is less readable to you, you are paying attention to the wrong things (the forms of the operands, rather than the operator).
  • Vinko Vrsalovic
    Vinko Vrsalovic almost 15 years
    a) Did you see anything in my comment about whether you said what one should or should not do? b) When you deal with many languages on almost a daily basis, every little bit helps. Using quotes is totally clear an unambiguous in (almost) any language, omitting them means one extra mental step to take.
  • Peter Mortensen
    Peter Mortensen about 3 years
    How is this different from the previous answers?
  • Wolf
    Wolf about 2 years
    I cannot confirm that for Perl v5.32