这两个数组声明有什么区别?

时间:2019-06-25 22:02:26

标签: perl

好吧,我意识到我原来的问题确实很糟糕。这就是步骤2。我们的目标是仅使用“拼接”在Perl中复制以下命令的行为。

my @arr = qw (A B C D);
@arr = ();
#or
@arr;
#replace the commands above.

我用过

splice(@arr)

替换命令。但是我想知道写作

是否有区别
@arr = (); 

@arr;

3 个答案:

答案 0 :(得分:4)

my @arr = ();

是一种混乱,效率低下的写作方式

my @arr;

它的作用:它将创建一个名为@arr的新的空词法作用域数组。

按词法范围表示@arr仅在包含它的最里面的小卷发(或文件)中可见(即只能使用)。

为数组分配一个空列表会清空它,但是保证新创建的数组已经为空。


my @arr = qw( A B C D );

等同于

my @arr = split(' ', q( A B C D ));

这是一种便捷的书写方式

my @arr = ( 'A', 'B', 'C', 'D' );

它的作用:创建一个名为@arr的新的词法作用域数组,并分配四个字符串(ABCD )。

您会从中获得相同的结果

my @arr;
$arr[0] = 'A';
$arr[1] = 'B';
$arr[2] = 'C';
$arr[3] = 'D';

(@arr, @arr = ( ))没有任何意义。它等于@arr = ()

my @arr = qw (A B C D); my @arr = ();没有任何意义。它等于my @arr;

答案 1 :(得分:1)

my @arr = ();将perl变量@arr声明为所封闭块范围的局部变量。标题:@a, @a = ()中的声明全局定义了@a。这些链接可以为您提供一些帮助:

How should I use the "my" keyword in Perl?

Why declare Perl variable with "my" at file scope?

和来自perldoc:

https://perldoc.perl.org/functions/my.html

如果使用了use strict之类的模块,那么如果未使用my定义变量,则程序将失败。

my @arr = qw(foo bar)是Perl的样式。这或多或少是Perl语言的惯例(例如,Python代码是 Pythonic 的方式)。

答案 2 :(得分:1)

my @arr =声明一个数组并为其分配一个列表。

在您的第一个示例中,该列表是由qw组成的列表,它“使用嵌入的空白作为单词定界符,评估从STRING中提取的单词的列表”。因此qw( A B C D )是列表'A','B','C','D'。可以使用()以外的其他定界符,就像其他引号类型运算符一样。

在第二个示例中,您正在为新数组分配一个空列表。为了使其等同于第一个示例而不使用qw,它可以是:

my @arr = ('A','B','C','D');

甚至:

my @arr = 'A'..'D';

qw在这里是为了方便;大多数人喜欢它,有些人不喜欢。使用任何适合您的方法。