我有一个应用程序,其中将运行需要能够访问存储数据的脚本。我想运行一个脚本(main.pl
)来创建一个数组。稍后,如果我运行A.pl
或B.pl
,我希望这些脚本能够访问先前创建的数组并更改其中的值。我需要在main.pl A.pl B.pl
中编码什么才能实现这一目标?
答案 0 :(得分:3)
通常,一个perl实例无法访问另一个实例的变量。那么问题就变成“人们可以做什么就像分享变量一样”?
一种方法是将数据存储在可以持久存储的位置,例如数据库或磁盘上的CSV文件。这意味着在程序开始时读取数据,编写或更新数据,自然会引发有关竞争条件,锁定等的问题......并且极大地扩展了任何可能的答案需要涵盖的范围。
另一种方法是编写程序以使用CSV或YAML或其他格式,可以通过CPAN中的库轻松读取和写入,并使用STDIN和STDOUT进行输入和输出。这允许存储分离,并且还可以将多个工具与shell提示符中的管道链接在一起。
对于将哈希绑定到共享内存的内存解决方案,您可以查看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写入物理文件,然后重新打开该文件以再次提取数据。