64

在 Python 中,如果我这样做:

print "4" * 4

我明白了

> "4444"

在 Perl 中,我会得到

> 16

有没有一种简单的方法可以在 Perl 中完成前者?

4

6 回答 6

103
$ 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,省略程序文件)
于 2008-11-10T10:02:56.743 回答
44

在 Perl 中,您想使用“x”运算符。

注意之间的区别

"4" x 4

("4") x 4

前者产生一个重复的字符串:

"4444"

后者是一个重复的列表:

("4", "4", "4", "4")
于 2008-11-10T11:28:02.593 回答
17

在 Perl 中非常相似

print "4" x 4;
于 2008-11-10T10:05:15.867 回答
11

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

通常,在 Perl 中,运算符是单态的,即。对于字符串语义、数字语义、按位语义等,您有不同的运算符集,这很有意义,并且操作数的类型在很大程度上无关紧要。当您将数字运算符应用于字符串时,首先将字符串转换为数字并获得您要求的运算(例如乘法),当您将字符串运算符应用于数字时,它会变成字符串并且您获得您要求的操作(例如重复)。Perl 首先关注操作符,其次才是操作数的类型——如果它确实让他们注意的话。

这与 Python 和大多数其他语言相反,在这些语言中,您使用一组运算符,并且操作数的类型决定了您将实际获得哪些语义——即。运算符是多态的。

于 2008-11-10T13:17:09.723 回答
2

到目前为止给出的所有答案都没有提到该运算符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)
于 2015-05-07T12:19:36.407 回答
2

如果要打印 10 个字符“A”,也可以这样做

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

输出示例

user@linux:~$ perl -e 'print "A" x 10'; echo
AAAAAAAAAA
user@linux:~$ 
于 2017-06-26T09:21:25.997 回答