功能 push() Perl

在Perl编程语言都有一个内置的功能 push(). 使用这一特点,可以添加元,以结束Perl阵列。

这里有一个例子:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my @arr = (1, 2);

push @arr, undef, 'Hello', 8;

print Dumper \@arr;

该程序界定了一系列 @arr的 两个要素。 然后,使用该功能 push() 在这个阵列加入另外3项。 undef,行 'Hello' 和数 8.

输出从这样的程序:

$VAR1 = [
          1,
          2,
          undef,
          'Hello',
          8
        ];

参数

push(@arr, $value1, $value2);
push(@arr, @other_arr);
push(@arr, @other_arr, @and_the_other_arr);

标准的使用 push() 是通过它不是 至少两个要素。

第一个元素必须是一个阵列(某些版本的Perl 第一件可以引用一个数组,但这 使用不是建议,详细信息在另一个部分下面)

下面的论点是通常标量或阵列。 在该系列第一 参数将加入的所有元素的以下论点。

作为参数可以指定哈希 push(@arr, %hash). 在阵列 @arr 将增加所有对关键价值的哈 (有的特点的顺序的散列值是不确定 和不同的运行的相同程序可以创建 该阵列的要素在不同的序列)。 但 现实生活使用的散列函数参数 push() 罕见的。

如果没有指定任何论点,它将错误:

Not enough arguments for push at script.pl line 3, near "push()"
Execution of script.pl aborted due to compilation errors.

如果你指定的一个论点,该论点是一系列 push(@arr);,然后错误不会 这不会改变阵列,但如果代码 use warnings;, 这是警告:

Useless use of push with no values at script.pl line 8.

回值

功能 push() 返回的数量元素,这是在阵之后 执行这一功能。

my $number = push(@arr, $value);

这个代码类似于这个代号:

push(@arr, $value);
my $number = scalar(@arr);

回值 push() 不需要非常频繁。 经常使用 push(@arr, $value),并回 值被忽略。

使用ARRAYREF作为第一个参数

标准的使用 push() —第一个论点是 阵列入其中的元素添加的所有其他参数。

但是在编程语言Perl是一个实验。 如果 第一个论点是一系列参考,该职能 push()本身 有没有取消引用此基准和增加数据的阵列。

这里是代码。

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my $arr = [];

push $arr, 1;

warn Dumper $arr;

Perl版5.12(包括)这个代码引发的错误:

Type of arg 1 to push must be array (not private variable) at script.pl line 9, near "1;"
Execution of script.pl aborted due to compilation errors.

开始Perl5.14和5.18至版本(包括)的加入的代码 该项目在ARRAYREF,结果是:

$VAR1 = [
          1
        ];

Perl5.20和5.22还增加了一个项目在ARRAYREF,但是也给了 警告:

push on reference is experimental at script.pl line 9.
$VAR1 = [
          1
        ];

并开始与版5.24本代码给的错误:

Experimental push on scalar is now forbidden at script.pl line 9, near "1;"
Execution of script.pl aborted due to compilation errors.

这个功能的语言的使用并不建议。 如果你需要添加 该项目在ARRAYREF,最好是清楚地写 push @{$arr}, 1; 而不是 push $arr, 1;

这里的工作的代码相同于所有版本的Perl:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my $arr = [];

push @{$arr}, 1;

warn Dumper $arr;

官方文件

这里是输出的命令 perldoc -f push:

       push ARRAY,LIST
       push EXPR,LIST
               Treats ARRAY as a stack by appending the values of LIST to the
               end of ARRAY.  The length of ARRAY increases by the length of
               LIST.  Has the same effect as

                   for $value (LIST) {
                       $ARRAY[++$#ARRAY] = $value;
                   }

               but is more efficient.  Returns the number of elements in the
               array following the completed "push".

               Starting with Perl 5.14, "push" can take a scalar EXPR, which
               must hold a reference to an unblessed array.  The argument will
               be dereferenced automatically.  This aspect of "push" is
               considered highly experimental.  The exact behaviour may change
               in a future version of Perl.

               To avoid confusing would-be users of your code who are running
               earlier versions of Perl with mysterious syntax errors, put
               this sort of thing at the top of your file to signal that your
               code will work only on Perls of a recent vintage:

                   use 5.014;  # so push/pop/etc work on scalars (experimental)

相关的主题

其他文章