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

iezvtpos  于 2022-11-15  发布在  Perl
关注(0)|答案(7)|浏览(573)

在Python中,如果我这样做:

print "4" * 4

我得到

> "4444"

在Perl中,我会得到

> 16

在Perl中有没有简单的方法来实现前者?

gj3fmq9x

gj3fmq9x1#

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

perldoc perlop中介绍了x运算符,这里binary是指一个运算符有两个参数,不是由位组成的。
二进制“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)
8cdiaqws

8cdiaqws2#

在Perl中,您需要使用“x”运算符。
请注意以下两个方面的区别

"4" x 4

("4") x 4

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

"4444"

后者是一个重复的列表:

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

dsekswqp3#

在Perl中非常类似

print "4" x 4;
7vhp5slm

7vhp5slm4#

FWIW,在Perl中也是print 4 x 4
一般来说,在Perl中,运算符是单态的,也就是说,对于字符串语义、数字语义、位语义等,你有不同的运算符集,在这些情况下,它是有意义的,而操作数的类型在很大程度上是无关紧要的。当你将数字运算符应用于字符串时,字符串首先被转换为数字,然后你得到你所要求的运算(例如乘法),而当你对一个数字应用字符串运算符时,它会变成一个字符串,你会得到你所要求的运算(例如重复)。Perl首先关注运算符,其次才关注操作数的类型--如果它确实关注它们的话。
这与Python和大多数其他语言相反,在Python和大多数其他语言中,你使用一组操作符,操作数的类型决定了你实际得到的语义--也就是说,操作符是多态的。

slmsl1lt

slmsl1lt5#

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

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

输出示例

user@linux:~$ perl -e 'print "A" x 10'; echo
AAAAAAAAAA
user@linux:~$
xmd2e60i

xmd2e60i6#

到目前为止给出的所有答案都没有提到运算符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)
velaa5lx

velaa5lx7#

我来这里寻找答案。没有找到我想要的,所以我想分享我的学习。我想用适当数量的占位符组成动态SQL CRUD语句。

$table = "ORDERS";

@fields = ("ORDER_ID", "SALESMAN_ID", "CUSTOMER_ID", "ORDER_DATE", "STATUS");

$sql = "INSERT INTO $table (" . join(',', @fields) . ') VALUES (' . '?,' x (@fields - 1) . '?)';

print $sql;

输出如下所示...

INSERT INTO ORDERS (ORDER_ID,SALESMAN_ID,CUSTOMER_ID,ORDER_DATE,STATUS) VALUES (?,?,?,?,?)

相关问题