父进程和子进程之间的通信-Perl

父进程和子进程之间的通信-Perl,perl,tcl,fork,exec,system,Perl,Tcl,Fork,Exec,System,我正在终端中运行一个perl程序“a.pl”,它需要调用另一个程序“b.pl”,然后将环境转换为tcl shell。程序“b.pl”设置了我必须在主程序“a.pl”中使用的环境变量,之后我需要在“b.pl”创建的tcl环境中运行新命令。请参见下面的示例 节目:a.pl #!/usr/intel/bin/perl -w use strict; use warnings; #turns it to a tcl shell and sets environment varia

我正在终端中运行一个perl程序“a.pl”,它需要调用另一个程序“b.pl”,然后将环境转换为tcl shell。程序“b.pl”设置了我必须在主程序“a.pl”中使用的环境变量,之后我需要在“b.pl”创建的tcl环境中运行新命令。请参见下面的示例

节目:a.pl

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

    #turns it to a tcl shell and sets environment variable VERSION
    system ("./b.pl");

    system ("source <tclExecutable> -version $VERSION");
#/usr/intel/bin/perl-w
严格使用;
使用警告;
#将其转换为tcl shell并设置环境变量版本
系统(“/b.pl”);
系统(“源-版本$version”);

第二个系统命令直到我在终端中手动退出tcl shell时才会执行。我看过叉子和打开烟斗,但我不知道该怎么做。我需要在由第一个系统命令打开的tcl shell中执行第二个命令。我如何才能做到这一点?

您可以使用
require
在a.pl内部运行
b.pl
。它可以提供您想要的简单脚本

a、 pl

b、 pl


不能在子进程中设置父进程的环境变量。b.pl如何设置env vars?这是我见过的运行Tcl脚本最奇怪的方式。好吧,无论如何,这周…你可能想尝试使用套接字进行通信。。另一个简单的解决方案是将b.pl中的信息写入一个文本文件,在运行tclshell之前在a.pl中进行处理
use strict;
use warnings;

our $Version;
require "/.../b.pl"; # full path to b.pl script
print "Version: $Version\n";
use strict;
use warnings;

our $Version;
$Version = "YES!";