0
看一看這段代碼:怪異的行爲引用
my @arr = (1, 2);
my $ref = \@arr;
my @s = @$ref;
push @s, 4;
print join(", ", @arr) . "\n";
出乎意料的是,輸出爲「1,2」。發生了什麼?我怎麼得到兩個不同的數組(@s是(1,2,4))?
當然我得到 「1,2,4,」 如果我寫,輸出,像這樣的事情之前:
$ref = \@s;
@arr = @$ref;
但似乎相當笨拙。
我習慣了其他的OOP語言,在這種語言中不會發生這樣的事情 - 一個對象可以修改,不管其引用如何。
那麼任何人都可以請幫助我嗎?
謝謝你的回答。這很奇怪,不是嗎?有什麼方法可以「修復」嗎?我的意圖如下:我有一個類,其中一個字段是對數組的引用。我希望在不同的類中更改該數組,所以我做了@array = @ {$ object - > {array}};這並沒有奏效。所以你說最好的方法是寫我的$ ref = $ object - > {array}並每次都推@ @ ref? – Rob
@Rob,這是一種方法。在Perl 5.14中,您可以編寫'push $ ref,4'而不是(隱式解引用)。你也可以寫'push_array'方法,然後執行'$ object-> push_array(4)'。 [Moose :: Meta :: Attribute :: Native](http://search.cpan.org/perldoc?Moose::Meta::Attribute::Native)可以幫助簡化這一點。 – cjm
好的,謝謝! – Rob