将哈希和数组传递给函数问题

时间:2011-03-14 09:43:32

标签: perl

我试图传递ConnectODBC(%settings , @connectionString);哈希然后传递数组在我加载的函数中,然后像my (%settings , @connectionString) = @_;

对于哈希我得到了正确的值,但print $connectionString[0] . ".\n";

我得到Use of uninitialized value $conection[0] in concatenation (.)

知道为什么吗?

1 个答案:

答案 0 :(得分:9)

由于您要分配列表/哈希,因此第一个参数会全部吸收它。

my %h1 = ( key => value );
my @a1 = (1, 2 );
my ( @a2, %h2 ) = ( @a1, %h1 );
# @a2 now contains (1,2,key,value) and %h2 is undefined.

要获得你想要的东西,你应该传递参考。

ConnectODBC( \%settings , \@connectionString);
sub ConnectODBC {
    my ( $setting_ref, $connection_ref ) = @_;
    my %settings = %$setting_ref;
    my @connectionString = @$connection_ref;
}

我应该注意,在子程序中从参考中创建哈希和数组可能是不必要的。您可以直接从参考中访问设置。 $setting_ref->{key}$settings{key}相同。