如何创建一个公共数组并在几个perl脚本之间使用?

时间:2013-06-25 09:46:14

标签: perl

我有一个应用程序,其中将运行需要能够访问存储数据的脚本。我想运行一个脚本(main.pl)来创建一个数组。稍后,如果我运行A.plB.pl,我希望这些脚本能够访问先前创建的数组并更改其中的值。我需要在main.pl A.pl B.pl中编码什么才能实现这一目标?

2 个答案:

答案 0 :(得分:3)

通常,一个perl实例无法访问另一个实例的变量。那么问题就变成“人们可以做什么就像分享变量一样”?

一种方法是将数据存储在可以持久存储的位置,例如数据库或磁盘上的CSV文件。这意味着在程序开始时读取数据,编写或更新数据,自然会引发有关竞争条件,锁定等的问题......并且极大地扩展了任何可能的答案需要涵盖的范围。

另一种方法是编写程序以使用CSV或YAML或其他格式,可以通过CPAN中的库轻松读取和写入,并使用STDIN和STDOUT进行输入和输出。这允许存储分离,并且还可以将多个工具与shell提示符中的管道链接在一起。

对于将哈希绑定到共享内存的内存解决方案,您可以查看IPC :: Shareable

http://metacpan.org/pod/IPC::Shareable

答案 1 :(得分:1)

无法存储Perl内存结构,然后由其他Perl脚本访问。但是,您可以将这些内存结构写为文件。这可以通过硬原始编码或使用各种Perl模块来完成。 Storable是一个标准的Perl模块,已经存在了很长一段时间。

由于你要安装的只是一个数组,你可以让一个程序将数组写入一个文件,然后让另一个文件读取数组。

use strict;
use warnings;
use autodie;
use constant {
    ARRAY_FILE => "$Env{HOME}/perl_arry.txt",
};

my @array;
[...]    #Build the array
open my $output_fh, ">", ARRAY_FILE;
while my $item ( @array ) {
    say {$output_fh} $item;
}
close $output_fh;

现在,让您的第二个程序读入此数组:

use strict;
use warnings;
use autodie;
use constant {
    ARRAY_FILE => "$Env{HOME}/perl_arry.txt",
};

my @new_array;
open my $input_fh, "<", ARRAY_FILE;
while ( my $item = <$input_fh> ) {
    push @new_array, $item;
}
close $input_fh;

可以使用Storable存储更复杂的数据,但它几乎是一样的:您需要将Storable写入物理文件,然后重新打开该文件以再次提取数据。