perl - 使用反引号代替系统()

Tyz*_*zak 4 perl system return-value backticks

我有一个perl脚本,通过使用system()调用其他perl脚本

就像是:

my $returnval= system("perl", $path,$val1, $val2,@myarray);
Run Code Online (Sandbox Code Playgroud)

因为system()只返回退出状态,但我想要脚本的输出,我想使用反引号.

我试过这样的事情:

my $returnval = `$path`;
Run Code Online (Sandbox Code Playgroud)

如何添加脚本应该接收的参数?

其他perl脚本的返回代码应该怎么样?目前它就像

exit ($myreturnedvalue);
Run Code Online (Sandbox Code Playgroud)

(如何)是否可以返回多个值?

TLP*_*TLP 5

通过shell来将数据从一个perl脚本移动到另一个脚本不是最好的解决方案.您应该知道反引信或qx()捕获打印到STDOUT的任何内容.使用exit ($var)其他脚本不太可能正确捕获.你需要print $var.但是不要这样做.

相反,将另一个脚本放入模块并直接使用子例程.这是一个简单的例子:

在bar.pm:

use strict;
use warnings;

package bar;  # declare our package

sub fooz {             # <--- Our target subroutine
    my $in = shift;    # passing the input
    return $in * 5;    # return value
}
1; # return value must be true
Run Code Online (Sandbox Code Playgroud)

在main.pl中:

use strict;
use warnings;
use bar;   # bar.pm must be in one path in @INC

my $foo = bar::fooz(12);  # calling fooz from our other perl script
print "Foo is $foo\n";
Run Code Online (Sandbox Code Playgroud)

还有很多东西需要学习,我建议您阅读文档.