从第二个perl文件调用一个perl文件,同时获取第二个文件的变量

时间:2016-09-16 06:57:31

标签: perl

我想知道这是否可行。文件a.pm几乎没有b.pl所需的变量。和b.pl由a.pm

调用
 a.pm
    {
    $var1,$var2;
    system (perl b.pl);
    }

b.pl 
{
print "$var1";
}

如何将$ var1和$ var2用于b.pl.我不想将命令行参数传递给b.pl

2 个答案:

答案 0 :(得分:1)

如果对新的Perl解释器进行系统调用,则无法共享相同的变量。为此,您可以将它们作为命令行参数传递。

use strict;
use warnings;

my $var1 = 'foo';
my $var2 = 'bar';

system( 'perl b.pl', $var1, $var2);

然后在b.pl:

use strict;
use warnings;

print $ARGV[0];

参数最终在@ARGV中,可以用作常规数组。如果要共享数据结构,则必须先将它们序列化。您可以使用StorableJSON来执行此操作。然后,您需要在第二个程序中反序列化它们。

还有更复杂的替代方案,但我认为详细介绍(例如保存到文件,打开管道以及在第二个脚本中读取STDOUT)有点超出范围。

答案 1 :(得分:-1)

您可以从 a.pm 传递 PM > Update-Database -Script -SourceMigration: $InitialDatabase -TargetMigration: AddPostAbstract $var1 b.pl 以及使用系统执行命令。请检查以下内容:

<强> a.pm

var2

b.pl

my ($var1,$var2);
$var1="Open";
$var2="Close";
system ("perl b.pl $var1 $var2");

输出将是:

<强> 打开

如果您不需要通过命令行发送值,请尝试以下操作。 要做的是通过在%ENV 哈希中设置它来传递值,如下面的程序中给出的那样。设置密钥时请务必小心,以免替换现有的%ENV密钥。

<强> a.pm

my $var1=$ARGV[0];
my $var2=$ARGV[1];
print "$var1";

b.pl

my ($var1,$var2);
$var1="Open";
$var2="Close";
$ENV{m_temp_x_var1}=$var1;
$ENV{m_temp_x_var2}=$var2;
system ("perl b.pl");

输出将是:

<强> 打开