拆分字符串并将每个元素作为参数传递给perl

时间:2017-07-26 14:56:13

标签: perl

我想传递散列键并将值配对作为参数。以下代码我试过了。请告诉我们通过拆分字符串或映射哈希值来传递参数的方法。

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";
}

4 个答案:

答案 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 ",", @_;
}