如何从Perl函数调用返回多个值?
my ($value1, $value2, $value3) = getValues(@parts)
sub getValues
{
foreach(@_)
{
$_ =~ m{/test1_name (.*) test2_name (.*) test3_name (.*)/};
$test1_value = $1;
$test2_value = $2;
$test3_value = $3;
}
}
Run Code Online (Sandbox Code Playgroud)
此代码无效.
Dav*_*ave 19
my ($value1, $value2, $value3) = getValues(shift @parts);
sub getValues
{
my $str = shift @_;
$str =~ m{/test1_name (.*) test2_name (.*) test3_name (.*)/};
return ($1, $2, $3);
}
Run Code Online (Sandbox Code Playgroud)
如果你只想获得$ 1,$ 2,$ 3,你不需要把它放在foreach循环中.该my $str = shift @_;基本上说"变量str设置为传递到此子值中的第一项".
而且,你传入一个数组.我做了一个转换,因为它从数组中获取第一个值(我假设是你要解析的字符串).如果您尝试做一些不同的事情,请更新您的问题,我会更新我的答案.
除了给出的其他答案之外,您还可以利用以下事实:列表上下文中的正则表达式匹配返回捕获括号,并且所有子例程都返回其最后计算的表达式:
my ($value1, $value2, $value3) = getValues($parts[0]);
sub getValues {
shift =~ m{/test1_name (.*) test2_name (.*) test3_name (.*)/}
}
Run Code Online (Sandbox Code Playgroud)
由于该子例程非常简单,您也可以这样写:
my $getValues = qr{/test1_name (.*) test2_name (.*) test3_name (.*)/};
my ($value1, $value2, $value3) = $parts[0] =~ $getValues;
Run Code Online (Sandbox Code Playgroud)