在Python中,如果我这样做:
print "4" * 4
我明白了
> "4444"
在Perl中,我会得到
> 16
在Perl中有一个简单的方法来做前者吗?
$ perl -e 'print "4"x4; print "\n"' 4444
在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
perl -e
意味着从命令行执行Perl代码:
$ perl --help Usage: perl [switches] [--] [programfile] [arguments] -e program one line of program (several -e's allowed, omit programfile)
在Perl中,您希望使用"x"运算符.
注意区别
"4" x 4
和
("4") x 4
前者产生重复的字符串:
"4444"
后者重复列表:
("4", "4", "4", "4")
它在Perl中非常相似
print "4" x 4;
FWIW,它也在print 4 x 4
Perl中.
通常,在Perl中,运算符是单态的,即.对于字符串语义,数字语义,按位语义等,你有不同的运算符集,它们是有意义的,并且操作数的类型在很大程度上无关紧要.当您将数字运算符应用于字符串时,字符串将首先转换为数字,然后您将获得所要求的操作(例如乘法),并且当您将字符串运算符应用于数字时,它将变为字符串并且您得到你要求的操作(例如重复).Perl首先注意操作员,操作数的类型仅次于第二 - 如果它确实让他们付出任何心思.
这与Python和大多数其他语言相反,您使用一组运算符,操作数的类型决定了您实际获得的语义 - 即.运算符是多态的.