一尘不染

编写持久性Perl脚本

linux

我正在尝试编写一个持久/缓存脚本。代码看起来像这样:

...
Memoize('process_fille');
print process_file($ARGV[0]);
...
sub process_file{
    my $filename = shift;
    my ($a, $b, $c) = extract_values_from_file($filename);
    if (exists $my_hash{$a}{$b}{$c}){
        return $my_hash{$a}{$b}{$c};
    }
    return $default;
}

可以从Shell脚本在循环中调用,如下所示

value=`perl my_script.pl`;

有没有办法我可以以保持状态的方式调用此脚本。从一个电话到另一个电话。假设初始化’%my_hash’和调用extract_values_from_file都是一项昂贵的操作。

谢谢


阅读 250

收藏
2020-06-03

共1个答案

一尘不染

如果示例中的%my_hash在其最终初始化状态下具有中等大小,则可以简单地使用序列化模块之一,例如StorableJSON
:: XS
Data ::
Dumper
,以在运行之间将数据保持为预组装形式。当不存在时生成一个新文件,并在存在时从那里重新加载准备好的内容。

另外,您提到过要循环调用此脚本。一个好的策略是不要立即在循环内部调用脚本,而是建立一个参数队列,然后在一次执行后将所有参数传递给脚本。脚本将设置其环境,然后遍历参数以简化工作,而无需为每个参数重做设置步骤。

2020-06-03