好吧,我意识到我原来的问题确实很糟糕。这就是步骤2。我们的目标是仅使用“拼接”在Perl中复制以下命令的行为。
my @arr = qw (A B C D);
@arr = ();
#or
@arr;
#replace the commands above.
我用过
splice(@arr)
替换命令。但是我想知道写作
是否有区别@arr = ();
和
@arr;
答案 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
的新的词法作用域数组,并分配四个字符串(A
,B
,C
和D
)。
您会从中获得相同的结果
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
在这里是为了方便;大多数人喜欢它,有些人不喜欢。使用任何适合您的方法。