2012年5月10日

[Perl] 陣列在副程式之間傳遞

通常傳遞陣列都是傳一個 reference 的記憶體位址過去,而不會真正把整個 Array 傳過去(雖然也是可以)

傳遞到副程式時:前面要加 \ ,讓 Perl 傳遞 reference 到 sub 內,副程式內用 scalar ($) 來接
副程式回傳後,要接收時:要解析 reference (通常稱作 dereference),在外面加上 @{ } 來 dereference
下面是一個簡單的範例

#!/usr/bin/perl

@mainAry = ("abc", "def");
#deference and expand the array
@returnAry = @{ &getInterface(\@mainAry) };
print "origin : @mainAry\n";
print "return : @returnAry\n";

sub getInterface() {
        my ($rec_ref) = @_ ;
        $a_ref = [];
        foreach $values (@{ $rec_ref }) {
                push(@$a_ref, $values);
                print "push $values\n";
        }
        return $a_ref;
}

沒有留言: