当我使用reverse()
或sort()
时,如果我想稍后使用它,我总是需要将return语句保存到变量中。
@array=qw(Nick Susan Chet Dolly Bill);
@array = reverse(@array);
为什么这与使用push()
,pop()
或shift()
不同,您只需调用该函数即可更改数组?
@array=qw(Nick Susan Chet Dolly Bill);
push(@array, "Bruce");
那么这些"功能"
之间的区别到底是什么?答案 0 :(得分:14)
perldoc perlfunc
提供了一个重要线索:
真实@ARRAYs的功能
each
,keys
,pop
,push
,shift
,splice
,unshift
,values
列表数据的功能
perldoc perlfaq4
解释了数组和列表之间的区别(强调我自己):
列表和数组有什么区别?
(由brian d foy提供)
列表是固定的标量集合。数组是一个变量 拥有可变的标量集合。阵列可以提供它 列表操作的集合,因此列表操作也适用于数组
...
数组操作,更改标量,重新排列它们,或者 添加或减去一些标量,仅适用于数组。 这些无法在列表中使用,已修复。数组操作包括
shift
,unshift
,push
,pop
和splice
。
简而言之,像reverse
这样的列表操作是为列表设计的,无法修改。
他们可以接受数组的事实只是列表支持的副作用。
答案 1 :(得分:1)
只需使用:
@array = reverse(@array)
我可能不会推荐这个,但如果你真的想要,你可以解决它......:
use Data::Dumper;
use strict;
use warnings;
use subs 'reverse';
my @array=qw(Nick Susan Chet Dolly Bill);
sub reverse(\@) {
my $a = shift;
@{$a} = CORE::reverse(@{$a})
}
reverse(@array);
print Dumper \@array;
#$VAR1 = ['Bill','Dolly','Chet','Susan','Nick'];