操作者 x Perl

操作者 x 的行为不同,取决于它是如何使用。

在标情况下它是用来创建一线希望的长度 重复的字符。 我们可以说,这个发言使得"倍增"的字符串。

在名单上下文(如果左操作数是写在括号内或与 使用 qw),他重复了一个元件一指定的次数。

这里是一个例如的操作者 x 中的标上下文:

▶ Run
#!/usr/bin/perl

my $str = 'A' x 4;

print $str;

该程序将显示一串由四个字 'A': 'AAAA'.

如果左边的操作数中指定多个人物,他们都将被重复:

▶ Run
#!/usr/bin/perl

my $str = 'Abc' x 2;

print $str;

这个例子显示一串 'AbcAbc'.

使用空字符串

在标背景下,操作者 x的 重复的字符串中指定的左操作数的次数,规定在正确的操作数。

如果您指定的作为左边的操作数是空串 '',标方面的结果将永远是一个空串,不管 的右值:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my $str = '' x 100;

print Dumper $str;

在结束程序中可以看出,在 $str 包含一个空串。

没有任何意义上使用这个操作者在标方面,empty string.

的右值

在标方面,正确的操作数的运算符 x 告诉你很多次你需要 重复该行包含左操作数。 在这种情况下,如果操作数为正整数,然后显然发生了什么结果。

但数字不仅是积极的。

  • 如果正确的操作数的数 0,结果都是一个空串。
  • 如果正确的操作是一个负数,结果都是一个空串。

在情况代码是 use warnings;,使用一个负数作为一项权利 操作员将显示警告。 这里是一个例子中的一个脚本,显示一串 'Negative repeat count does nothing at script.pl line 5.'.

▶ Run
#!/usr/bin/perl

use warnings;

my $str = 'a' x -3;

print $str;

如果正确的操作数是一个积极的数量与一个分部,该分部被简单地抛弃。 结果 'A' x 2.1 将是完全相同 'A' x 2.99 线 'AA'.

名单上下文

在名单上下文中,操作者 x 重复元。 但除此之外,你需要一个名单上下文,你需要 还可以容纳留操作数在括号内。 代码下面将创建一系列 @arr 其中包含3个要素, 每个元素都是一个串 'a':

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my @arr = ('a') x 3;

print Dumper \@arr;

但如果你没有指定方括号在左边的操作数,和编写 my @arr = 'a' x 3;,列 @arr将 只有一个项目,串 'aaa'.

此外,以简单的方括号,你可以使用的操作者 qw:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my @arr = qw(abc def) x 2;

print Dumper \@arr;

当你跑这个代码中列 @arr 将有4个要素,串 'abc', 'def', 'abc', 'def'.

官方文件

这一段的出 perldoc perlop的 有关操作者 x:

Multiplicative Operators

...

    Binary "x" is the repetition operator. In scalar context or if the left
    operand is not enclosed in parentheses, it returns a string consisting of
    the left operand repeated the number of times specified by the right
    operand. In list context, if the left operand is enclosed in parentheses
    or is a list formed by "qw/STRING/", it repeats the list. If the right
    operand is zero or negative (raising a warning on negative), it returns an
    empty string or an empty list, depending on the context.

        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

其他文章