我想传递散列键并将值配对作为参数。以下代码我试过了。请告诉我们通过拆分字符串或映射哈希值来传递参数的方法。
use strict;
my %hash=(1=>"Hi",2=>"Hello");
func(map { "$_,$hash{$_}" } keys %hash);
sub func{
#Statements will go here
my $arg1=shift;
my $arg2=shift;
my $arg3=shift;
my $arg4=shift;
print "$arg1,$arg2,$arg3,$arg4";
}
答案 0 :(得分:1)
您可以从map
BLOCK返回多个值。你可以用
func(map { $_, $hash{$_} } keys %hash);
但这与
相同func(%hash);
这会传递散列的键和值,因此您可以执行
sub func {
say join ", ", @_;
}
但是按键查找值意味着重建哈希值。
sub func {
my %new_hash = @_;
say $new_hash{2};
}
func(%hash);
传递哈希的元素以在内部创建新哈希是相当荒谬的。所以让我们传递哈希。这实际上无法完成,但我们可以传递对哈希的引用。
sub func {
my ($hash) = @_;
say $hash->{2};
}
func(\%hash);
答案 1 :(得分:0)
可能是一种更优雅的方式,但这有效:
#!/usr/bin/perl
use strict;
my %hash=(1=>"Hi",2=>"Hello");
my @list=%hash;
func1(\@list);
func2(\%hash);
sub func1{
#Statements will go here
my @args = @{+shift};
print join(',',@args), "\n";
}
sub func2{
#Statements will go here
my %args = %{+shift};
print join(',',keys %args), "\n";
}
答案 2 :(得分:0)
不要使用引号,应该是,
func(map { $hash{$_},$_ } keys %hash);
当您对字符串使用引号时,它是一个单一的数据。
例如,
func ("data1,data2,data3"); #Here you are passing single parameter to a function. You are doing this mistake.
func ("data1","data2","data3"); #Here you are passing three parameters to the function.
答案 3 :(得分:0)
直接传递哈希本身,例如
func( %hash );
散列键/值对被展平为参数数组@_
。
sub func
{
print join ",", @_;
}