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

Perl - Subroutine argument is another subroutine call

我有一个名为 grepText 的子例程,它只是从另一个变量中获取文本。我正在尝试拆分输出。是否可以将 grepText 的输出作为参数直接传递给 split?不首先将 grepText 的值放入变量中? grepText returns 一个字符串。

我想做的是:

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

grep文本如下

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)"

当然可以。但是正如您所写的那样,grepText 得到了一些奇怪的参数。在

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

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

的列表

所以你调用 grepText($Alltext)grepText(1, $Alltext) 取决于 $_ 是否包含 $textToFind

中的正则表达式模式

我很确定这不是您想要做的,所以最好提供更多信息!

然而,无论 grepText returns 将在冒号 :(split ":", grepText(...))[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