Perl - 子例程参数是另一个子例程调用

时间:2015-05-14 23:31:22

标签: perl split

我有一个名为grepText的子程序,它只是从另一个变量中获取文本。我想分割输出。是否可以将grepText的输出作为参数直接传递?没有先将grepText的值放在变量中? grepText返回一个字符串。

我想做的是:

$output = (split ":", grepText("findThis", $Alltext))[1];

grepText如下

sub grepText(){
my @text = split "\n", $_[1];
my $output = grep /$_[0]/, @text;
return $output;
}

它不起作用。错误是

Too many arguments for main::grepText at a line 115, near "$Alltext)"

2 个答案:

答案 0 :(得分:1)

当然可以。但正如你所写的那样grepText正在获得一些奇怪的参数。在

(split ":", grepText(/$textToFind/, $Alltext))[1];

您正在调用grepText(/$textToFind/, $Alltext),它正在全局变量$textToFind中搜索$_的值,并且在列表上下文中,正在插入一个空列表{{1参数

中包含1 ()的列表

根据(1)是否包含grepText($Alltext)

中的正则表达式模式,您打电话给grepText(1, $Alltext)$_

我很确定这不是你想要做的,所以更多的信息会很好!

但是,任何$textToFind返回的内容都将在冒号grepText上分开,而:将为您提供第二个以冒号分隔的字段,这似乎就是您所要求的< / p>

答案 1 :(得分:1)

非常可能直接将子例程的输入传递给任何perl函数而不使用perl变量。

我认为问题可能与您的“grepText”子程序有关。要详细调试此问题,需要更多信息。

我确实尝试过你的例程,我能够得到所需的输出:

#!/usr/bin/perl
sub grepText
{
 return "hello:world"; # returns a test string
}

my $output = (split ":", grepText($textToFind, $Alltext))[1];
print "$output";

输出:

world