2016-03-07 79 views
0

有任何區別,關於記憶和/或盤使用,傳遞變量的這兩種方式之間的子程序:內存使用Perl函數

&subrutine_1($hash_reference); 

sub subrutine 
{ 
    my $hash = $_[0]; 
    my $var_1 = $$hash{'var_1'}; 
    my $var_2 = $$hash{'var_2'}; 
    my $var_3 = $$hash{'var_3'}; 
} 

&subrutine_1($hash_reference); 

sub subrutine 
{ 
    my $var_1 = $_[0]{'var_1'}; 
    my $var_2 = $_[0]{'var_2'}; 
    my $var_3 = $_[0]{'var_3'}; 
} 

謝謝!

回答

1

磁盤使用情況應該相同,因爲沒有I/O操作。在第一種情況下,內存消耗會更大,因爲您需要一個標量變量$ hash。它只會存儲一個參考,所以差異很小。

真的複製散列會佔用更多的內存,但:

sub subroutine { 
    my %hash = %{ $_[0] }; 
    my $var_1 = $hash{var_1}; 
    # ... 
}