You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Bash脚本调用不可修改的Perl模块并获取多个返回值

问题:从Bash中获取Perl函数回传的两个参数值

现有Perl模块MyModule中的MyFunction函数通过参数回传两个结果值,但当前Bash调用方式只能获取到最后一个回传值,且无法修改Perl函数代码,需求是同时获取这两个回传值用于后续操作。

现有Perl模块代码

package MyModule;

sub MyFunction
{
   my $var_0 = $_[0];
   my $var_1;
   my $var_2;

   if ($var_0 =~ /WA/) {
      $var_1 = "Olympia";
      $var_2 = "Population is 53,000";
   }
   elsif ($var_0 =~ /OR/) {
      $var_1 = "Salem";
      $var_2 = "Population is 172,000";
   }
  
  $_[1] = $var_1;
  $_[2] = $var_2;
 
 return 0; # no error
}

当前Bash调用方式(仅能获取最后一个值)

VAL=`perl -I. -MMyModule -e 'print MyModule::MyFunction("WA")'`
echo $VAL

解决方案

核心思路是在Perl调用代码中传入两个可被函数修改的变量,将函数回传的两个值用无冲突分隔符拼接后输出,再在Bash中拆分结果到单独变量。

方法1:使用Bash内置拆分(推荐)

# 调用Perl函数,传递两个变量接收回传值,用|拼接输出
IFS='|' read -r CITY POPULATION <<< "$(perl -I. -MMyModule -e 'my ($a, $b); MyModule::MyFunction("WA", $a, $b); print "$a|$b"')"

# 后续使用变量
echo "城市:$CITY"
echo "人口信息:$POPULATION"

方法2:使用cut命令拆分

# 获取拼接后的结果
RESULT=$(perl -I. -MMyModule -e 'my ($a, $b); MyModule::MyFunction("WA", $a, $b); print "$a|$b"')

# 拆分到单独变量
CITY=$(echo "$RESULT" | cut -d'|' -f1)
POPULATION=$(echo "$RESULT" | cut -d'|' -f2)

# 验证输出
echo "城市:$CITY"
echo "人口信息:$POPULATION"

注意事项

  • 分隔符需选择不会出现在回传值中的字符,若结果可能包含|,可替换为制表符\t,对应Bash中设置IFS=$'\t',Perl中输出改为print "$a\t$b"。
  • Perl代码中必须显式声明两个变量并作为参数传入,否则函数无法修改并回传值。

内容的提问来源于stack exchange,提问作者Khai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:42:02