如何从bash脚本调用perl sub获得返回值?
我正在从bash脚本调用perl脚本。我想获得perl脚本在bash脚本中返回的返回值,以便对其进行操作。当我有以下内容时,当我预期控制台的输出为“良好”时,控制台的输出为空行 bashThing.sh如何从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
#!/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变量应该是$?
,而不是$@
。你能检查一下吗?