如何从bash脚本调用perl sub获得返回值?

如何从bash脚本调用perl sub获得返回值?,bash,perl,Bash,Perl,我正在从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

我正在从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;

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

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

您还需要将值正确地传递给
isValid

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

bash:

#!/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;
Perl:

#!/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;

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

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

您还需要将值正确地传递给
isValid

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

bash:

#!/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;
Perl:

#!/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;

如果您希望
$VAR
中的值
good
bad
,则应
打印
而不是
返回
它们


除了
print
ed内容之外,perl进程只能将整数
return
值传递给调用程序。您可以使用bash脚本中的
$?
检查此变量是否存储上次运行进程的
返回值。

如果您希望
$VAR
中的
值为good
bad
,则应
打印
而不是
返回
它们


除了
print
ed内容之外,perl进程只能将整数
return
值传递给调用程序。您可以使用bash脚本中的
$?
检查此变量是否存储上次运行进程的
返回值。

存储返回代码的bash变量应该是
$?
,而不是
$@
。您能检查一下吗?存储返回代码的Bash变量应该是
$?
,而不是
$@
。你能检查一下吗?