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
我有一个名为 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