Perl 为什么reverse()不更改我的数组?
当我使用Perl 为什么reverse()不更改我的数组?,perl,push,reverse,Perl,Push,Reverse,当我使用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"); 那么这些“功能”之间到底有什么区别呢?只需使用: @a
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");
那么这些“功能”之间到底有什么区别呢?只需使用:
@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'];
提供了一个主要线索:
实数@数组的函数
,,
,
,
,
,
,
,
列表数据的函数
,,
,
,
,
,
,
并解释数组和列表之间的区别(我自己强调): 列表和数组之间有什么区别? (布莱恩·福伊撰稿) 列表是一个固定的标量集合。数组是一个 保存标量的变量集合。数组可以提供其 用于列表操作的集合,因此列表操作也适用于数组 数组操作,更改标量、重新排列标量或 添加或减去一些标量,仅对数组有效这些无法在列表上工作,列表已修复。数组操作包括
移位
,取消移位
,推压
,弹出
,以及拼接
简而言之,像
reverse
这样的列表操作是为不能修改的列表设计的
他们可以接受数组的事实只是列表支持的一个副作用。答案可能是,这样您就可以链接
grep、sort、map、reverse
。如果你担心冗长的问题,你可以对数组进行@$\uu=reverse$\uuu,但我不会这么做。谢谢,听起来你知道答案,但我不明白。因为reverse
(比如排序
,grep
,映射
和其他)处理列表,而推送
,弹出
,shift
和unshift
在阵列上工作。数组不是列表。是的,我知道我可以将它分配给同一个数组。但是为什么我必须将它分配给一个数组(同一个数组或另一个数组,没有关系)。因为当我使用pop()时,我只能说:pop(@array);并且数组将被更改,而无需我将其分配给任何对象。除了现在reverse
将无法处理列表之外:my@array=reverse(1..6);打印转储程序\@数组
将参数1的类型返回到main::reverse必须是数组(非空操作)
Aaah是,除此之外!:-)我说过我不推荐它!换句话说,你可以反转(qw(Nick Susan Chet Dolly Bill))
但是你不能推(qw(Nick Susan Chet Dolly Bill),“Bruce”)