首页 > 解决方案 > 如何从bash脚本调用perl sub获取返回值?

问题描述

我正在从 bash 脚本调用 perl 脚本。我想获取 perl 脚本在 bash 脚本中返回的返回值,以便对其进行操作。当我有以下内容时,当我期望它是“好”时,输出是控制台的空白行。

bashThing.sh

#!/bin/bash

ARG="valid"
VAL=$(perl -I. -MperlThing -e "perlThing::isValid ${ARG}")
echo $VAL

perlThing.pm

#! /usr/bin/perl -w
use strict;

package perlThing;

sub isValid
{
  my $arg = shift;
  if($arg == "valid")
  {
    return "good";
  }
  else
  {
    return "bad";
  }
}

1;

标签: bashperl

解决方案


您没有完全warnings启用 Perl。你会看到几个警告。我在 bash (-w在 Perl 单行程序上使用)和 Perl 中都启用了警告use warnings;。shebang 行在.pm文件中被忽略,因为它没有作为脚本执行。

isValid返回一个字符串,但您忽略了返回值。要解决这个问题,print请在单线中使用。

您还需要isValid正确传递值。

最后,您需要使用eq而不是==进行字符串比较。

重击:

#!/bin/bash

ARG="valid"
VAL=$(perl -w -I. -MperlThing -e "print perlThing::isValid(q(${ARG}))")
echo $VAL

珀尔:

use strict;
use warnings;

package perlThing;

sub isValid
{
  my $arg = shift;
  if($arg eq "valid")
  {
    return "good";
  }
  else
  {
    return "bad";
  }
}

1;

推荐阅读