我想通过使用带有反引号的命令行将矩阵从一个perl文件传输到另一个文件。
在第一个文件perl上,source.pl:
use warnings;
use strict;
my @matrix = (
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
);
my $results = `perl other_file.pl @matrix`; #option 1
# my $results = `perl other_file.pl '@matrix'`; #option 2
print $results;
在other_file.pl
上use strict
use warnings
my @matrix_other = $ARGV[0];
print "mat_adress = ".$matrix_other[1][2]."\n";
启动source.pl后,终端输出:
我也尝试在other_file.pl中使用Symbolic references但没有成功(输出为:“不是other_file.pl中的ARRAY引用”)
有什么想法吗? 非常感谢。
PS:命令行中的简单变量$ var没问题;
答案 0 :(得分:1)
好的,从根本上讲 - 做你想要直接做的事是不可能的。数组是一种内存状态,它不方便打包以传递它。这就是为什么你得到像ARRAY(0x6c0cb8)
这样的东西 - 那是因为它是数组(或子元素)占用的内存地址。
因此,无论如何,您需要先渲染数组,然后在子程序中解析它。
这是一个足够大的主题,有关于它的文档的整个部分:
perlipc
根据你想要完成的具体内容,采取的方法会有所不同。对于你试图做的事情,我首先想到的是Storable
:
use warnings;
use strict;
use Storable;
my @matrix = ( [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] );
my $tempfile = "matrix.$$";
store \@matrix, $tempfile;
my $results = `perl other_file.pl $tempfile`; #option 1
print $results;
并在'other_file'中使用retrieve
:
use warnings;
use strict;
use Data::Dumper;
use Storable qw/retrieve/;
my ($filename) = @ARGV;
print Dumper retrieve($filename);
(尽管你应该使用File::Temp
而不是临时文件的任意名称。)
但是,请查看perlipc
,其中有很多关于如何来回传递信息的信息。