我想知道这是否可行。文件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
答案 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
中,可以用作常规数组。如果要共享数据结构,则必须先将它们序列化。您可以使用Storable或JSON来执行此操作。然后,您需要在第二个程序中反序列化它们。
还有更复杂的替代方案,但我认为详细介绍(例如保存到文件,打开管道以及在第二个脚本中读取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");
输出将是:
<强> 打开 强>