[英]Why does reverse() not change my array?
當我使用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");
那么這些“功能”究竟有什么區別呢?
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)
我可能不會推薦這個,但如果你真的想要你可以解決它...:
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'];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.