Perl:处理多个脚本中的全局变量



>我有以下场景 -> 3 个文件

  1. module.pl
  2. a.pl
  3. b.pl

-------------------Module.pm------------------

use strict;
use warnings;
Package Foo;
our %hash = ( NAME => "NONE" , SSN => "NONE");

----------------------a.pl-------------------

use strict;
use warnings;
use Module;
my $name = "Bill"
my $SSN = "123456789";
# update name and SSN
$Foo::hash{NAME} = $name;
$Foo::hash{SSN} = $SSN;

----------------------b.pl--------------------

use strict;
use warnings;
use Module;
## print the updated values of name and SSN
print "nUpdated values -> NAME = $Foo::hash{'NAME'} SSN = $Foo::hash{SSN}";

我先执行 a.pl,然后再执行 b.pl。但是 a.pl 给出了更新的输出,但 b.pl 仍然为这两个字段提供了旧的"NONE"输出。我什至尝试打印两者的地址都有 a.pl 和 b.pl 的值,它们是不同的。

任何想法如何访问 a.pl 中更新的值到 b.pl?

您将源代码(要执行的文本)和文本在执行时创建的数据结构混为一谈。

执行Module.pm(例如通过加载它)会在当前进程中创建一个哈希。(更具体地说,当前的解释器。 a.pl更改该哈希值。

b.pl不会访问该进程或解释器中的任何内容,这两者都可能不再存在。 b.pl执行Module.pm中的代码,甚至没有任何东西试图改变该文件。

如果要将数据从一个进程传输到另一个进程,则必须将其存储在双方都可以访问的地方。(磁盘、数据库、管道、共享内存等)

# To store
use Storable qw( lock_nstore );
lock_nstore(%Foo::hash, 'file');
# To recover
use Storable qw( lock_retrieve );
%Foo::hash = %{ lock_retrieve('file') };

最新更新