我们有两个版本的Active Perl5.6和5.24。我们有web服务,必须在Active perl '5.24‘版本上执行(采用TLS 1.2版本),这需要从Active perl '5.6’版本调用。我们正在使用windows操作系统。
步骤如下:在5.6版本中执行的 Caller代码使用system /require命令调用5.24版本。
问题:如何通过系统命令从5.6perl脚本调用5.24perl函数(例如:webservicecall(Arg1){返回"xyz")。另外,如何获得perl函数5.24的返回值?
注释:是一个临时的工作,它有两个版本,我们有一个计划对更高的版本进行升级。
这里,perl版本5.6安装在“C:\ perl \bin\perl\perl\”中,perl版本5.24安装在"D:\Perl\bin\perl\“中。
"**p5_6.pl**"
print "Hello Perl5_6\n";
system('D:\Perl\bin\perl D:\sample_program\p5.24.pl');
print $OUTFILE;
$retval = Mul(25, 10);
print ("Return value is $retval\n" );
"**p5_24.pl**"
print "Hello Perl5_24\n";
our $OUTFILE = "Hello test";
sub Mul($$)
{
my($a, $b ) = @_;
my $c = $a * $b;
return($c);
}我编写了详细信息示例程序,从perl脚本5.6版本调用perl 5.24版本。在执行过程中,我没有得到预期的输出。如何在$c脚本中获得“返回$OUTFILE”值& p5_24.pl的"our $OUTFILE“值?
注意:上面是示例程序,在此基础上,我将使用序列化数据修改实际程序。
发布于 2020-04-06 06:15:49
您不能直接调用与另一个Perl版本一起运行的Perl函数。您需要创建一个显式调用函数的程序。为了在这两个程序之间传输,需要显式地序列化输入和输出。
序列化可以使用Data::Dumper、Storable或类似的方法完成。如果需要更低的性能,您可以调用提供system函数的程序,并使用临时文件或管道共享序列化的数据。或者您可以创建一些客户机-服务器体系结构,并使用套接字共享序列化数据。后者更快,因为它跳过了另一个进程的重复启动和删除,而是保持了它的运行。
https://stackoverflow.com/questions/61053765
复制相似问题