Perl 将@ARGV 数组分配给变量

cap*_*ser 2 perl

当我将 Perl@ARGV数组分配给一个变量时,如果我不使用引号,它会给出数组中的字符串数,而不是数组中的字符串数。

这叫什么 - 我以为这是取消引用,但事实并非如此。现在我称它为我需要在 Perl 中记住的另一件事。

#!/usr/bin/perl

use strict ;
use warnings;

my $str = "@ARGV" ;
#my $str = @ARGV ;
#my $str = 'geeks, for, geeks';
my @spl = split(', ' , $str);

foreach my $i (@spl) {
        print "$i\n" ;
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*oss 5

如果在 Perl 中将数组分配给标量,则将获得数组中元素的数量。

my @array = (1, 1, 2, 3, 5, 8, 13);

my $scalar = @array; # $scalar contains 7
Run Code Online (Sandbox Code Playgroud)

这被称为“在标量上下文中评估数组”。

如果在 Perl 中用双引号字符串展开数组,则会得到数组元素以空格分隔。

my @array = (1, 1, 2, 3, 5, 8, 13);

my $scalar = "@array"; $scalar contains '1 1 2 3 5 8 13'
Run Code Online (Sandbox Code Playgroud)

这被称为“在双引号字符串中插入数组”。

实际上,在第二个示例中,元素由$"变量的当前内容分隔。该变量的默认值是一个空格。但是你可以改变它。

my @array = (1, 1, 2, 3, 5, 8, 13);

$" = '+';
my $scalar = "@array"; $scalar contains '1+1+2+3+5+8+13'
Run Code Online (Sandbox Code Playgroud)

要存储对数组的引用,您可以获取对数组的引用。

my $scalar = \@array;
Run Code Online (Sandbox Code Playgroud)

或者使用原始数组的元素创建一个新的匿名数组。

my $scalar = [ @array ];
Run Code Online (Sandbox Code Playgroud)

因为我们不知道您实际上要做什么,所以我们不能推荐其中哪一种是最好的方法。