在 Python 中,如果我这样做:
print "4" * 4
我明白了
> "4444"
在 Perl 中,我会得到
> 16
有没有一种简单的方法可以在 Perl 中完成前者?
$ perl -e 'print "4" x 4; print "\n"'
4444
x 运算符记录在 perldoc perlop中。顺便说一下,这里的二进制意味着一个运算符采用两个参数,而不是由位组成。
二进制“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 --帮助 用法:perl [switches] [--] [programfile] [arguments] -e 编写一行程序(允许几个-e,省略程序文件)
在 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 和大多数其他语言相反,在这些语言中,您使用一组运算符,并且操作数的类型决定了您将实际获得哪些语义——即。运算符是多态的。
到目前为止给出的所有答案都没有提到该运算符x
不仅适用于字符串文字,而且适用于作为字符串的变量或评估为字符串的表达式,例如
use feature 'say';
my $msg = "hello ";
say $msg x 2;
say chr(33) x 3;
像这样
hello hello
!!!
而且,更重要的是,如果表达式x
还没有自动转换为字符串(感谢ggorlen将我指向那个方向!)。所以例如
say 4 x 2;
say [$msg] x 2;
将导致类似以下内容的输出
44
ARRAY(0x30ca10)ARRAY(0x30ca10)
如果要打印 10 个字符“A”,也可以这样做
perl -e 'print "A" x 10'; echo
输出示例
user@linux:~$ perl -e 'print "A" x 10'; echo
AAAAAAAAAA
user@linux:~$