如何在Perl中重复一次字符串N次?

izb*_*izb 56 string perl operators repeat

在Python中,如果我这样做:

print "4" * 4
Run Code Online (Sandbox Code Playgroud)

我明白了

> "4444"
Run Code Online (Sandbox Code Playgroud)

在Perl中,我会得到

> 16
Run Code Online (Sandbox Code Playgroud)

在Perl中有一个简单的方法来做前者吗?

Vin*_*vic 95

$ perl -e 'print "4"x4; print "\n"'
4444
Run Code Online (Sandbox Code Playgroud)

在perldoc perlop中记录了x运算符.这里二进制表示运算符采用两个参数,而不是由位组成.

二进制"x"是重复运算符.在标量上下文中或如果左操作数未括在括号中,它将返回由左操作数组成的字符串,重复右操作数指定的次数.在列表上下文中,如果左操作数括在括号中或者是由" qw/STRING/" 形成的列表,则它会重复列表.如果右操作数为零或负数,则返回空字符串或空列表,具体取决于上下文.

       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
Run Code Online (Sandbox Code Playgroud)

perl -e 意味着从命令行执行Perl代码:

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

  • 我有理由使用引号,可读性和意图.你可以省略它们的事实并不意味着你必须(甚至应该). (6认同)

bar*_*art 41

在Perl中,您希望使用"x"运算符.

注意区别

"4" x 4
Run Code Online (Sandbox Code Playgroud)

("4") x 4
Run Code Online (Sandbox Code Playgroud)

前者产生重复的字符串:

"4444"
Run Code Online (Sandbox Code Playgroud)

后者重复列表:

("4", "4", "4", "4")
Run Code Online (Sandbox Code Playgroud)

  • 在Perl 6中,`x`运算符总是返回字符串(左操作数在字符串上下文中计算,例如,4x4 - >"4"x4 - >"4444"),`xx` - 列表的重复操作,例如,4xx4 - > (4)xx4 - >(4,4,4,4). (4认同)

The*_*aul 16

它在Perl中非常相似

print "4" x 4;
Run Code Online (Sandbox Code Playgroud)


Ari*_*zis 9

FWIW,它也在print 4 x 4Perl中.

通常,在Perl中,运算符是单态的,即.对于字符串语义,数字语义,按位语义等,你有不同的运算符集,它们是有意义的,并且操作数的类型在很大程度上无关紧要.当您将数字运算符应用于字符串时,字符串将首先转换为数字,然后您将获得所要求的操作(例如乘法),并且当您将字符串运算符应用于数字时,它将变为字符串并且您得到你要求的操作(例如重复).Perl首先注意操作员,操作数的类型仅次于第二 - 如果它确实让他们付出任何心思.

这与Python和大多数其他语言相反,您使用一组运算符,操作数的类型决定了您实际获得的语义 - 即.运算符是多态的.

  • a) 您是否在我的回答中看到了关于您应该或不应该做什么的任何内容?(无论如何,这个“4 x 4”不太可能逐字显示在实际的 Perl 代码中。) b) 如果它对您来说可读性较差,那么您正在注意错误的事情(操作数的形式,而不是运算符) . (2认同)
  • a)您是否在评论中看到有关您是否应该说出应该或不应该做什么的内容?b)当你几乎每天处理多种语言时,每一点都有帮助.使用引号是完全清楚的(几乎)任何语言都是明确的,省略它们意味着要采取一个额外的心理步骤. (2认同)