我试图传递ConnectODBC(%settings , @connectionString);
哈希然后传递数组在我加载的函数中,然后像my (%settings , @connectionString) = @_;
对于哈希我得到了正确的值,但print $connectionString[0] . ".\n";
我得到Use of uninitialized value $conection[0] in concatenation (.)
知道为什么吗?
答案 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}
相同。