当我使用reverse()
or时sort()
,如果我想稍后使用它,我总是需要将return语句保存到变量中.
@array=qw(Nick Susan Chet Dolly Bill);
@array = reverse(@array);
Run Code Online (Sandbox Code Playgroud)
为什么这与使用不同push()
,pop()
或者shift()
您可以只调用该函数并且数组将被更改?
@array=qw(Nick Susan Chet Dolly Bill);
push(@array, "Bruce");
Run Code Online (Sandbox Code Playgroud)
那么这些"功能"究竟有什么区别呢?
Zai*_*aid 14
perldoc perlfunc
提供了一个主要线索:
真正的@ARRAYs的功能
each
,keys
,pop
,push
,shift
,splice
,unshift
,values
列表数据的功能
并perldoc perlfaq4
解释了数组和列表之间的区别(强调我自己):
列表和数组有什么区别?
(由brian d foy提供)
列表是固定的标量集合.数组是一个包含可变标量集合的变量.数组可以为列表操作提供其集合,因此列表操作也适用于数组
...
数组运算,这改变了标量,重新排列它们,或 加或减一些标量,只能在阵列工作.这些不能在列表上工作,这是固定的.数组操作包括
shift
,unshift
,push
,pop
,和splice
.
简而言之,列表操作就像reverse
是为列表设计的,无法修改.
他们可以接受数组的事实仅仅是列表支持的副作用.
只需使用:
@array = reverse(@array)
Run Code Online (Sandbox Code Playgroud)
我可能不会推荐这个,但如果你真的愿意,你可以修复它......:
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'];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
198 次 |
最近记录: |