我有一个名为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)"
答案 0 :(得分:1)
当然可以。但正如你所写的那样grepText
正在获得一些奇怪的参数。在
(split ":", grepText(/$textToFind/, $Alltext))[1];
您正在调用grepText(/$textToFind/, $Alltext)
,它正在全局变量$textToFind
中搜索$_
的值,并且在列表上下文中,正在插入一个空列表{{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