Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在测试之间共享perl模块状态_Perl_Module_Global_State - Fatal编程技术网

在测试之间共享perl模块状态

在测试之间共享perl模块状态,perl,module,global,state,Perl,Module,Global,State,我使用的是Test::More,我有一个helper函数需要运行一段时间。我需要在几个测试脚本中使用它。我想保存运行此函数的结果,以便所有脚本都可以访问状态。每次测试调用函数的结果都不会改变 我创建了如下模块: 包裹助理 our $_global_state = under; sub helper { if ( !defined( $_global_state)) { #insert magic here to set the _global_state

我使用的是Test::More,我有一个helper函数需要运行一段时间。我需要在几个测试脚本中使用它。我想保存运行此函数的结果,以便所有脚本都可以访问状态。每次测试调用函数的结果都不会改变

我创建了如下模块: 包裹助理

our $_global_state = under;

sub helper {
    if ( !defined( $_global_state)) {
        #insert magic here to set the _global_state
        print STDERR "Inside magic\n";
    }
    return $_global_state;
}

return 1;

但是,如果我从多个测试脚本调用这个函数,它每次都会重复“魔术”。如果可能的话,我会尽量避免这种情况。

可以通过以下方法解决:

  • 将计算的状态保存到文件中
  • 如果文件在10分钟内没有最后修改,请重新计算该值
使用:

使用严格;
使用警告;
使用可储存材料;
我们的$state_文件='global.state';
助手{
#检查文件是否在10分钟内最后一次修改。
如果(-e$state_文件&&M$state_文件<1/24/6){
返回检索($state_file);
}
#在此处插入魔术设置_全局_状态
我的$global_state={'a'..'d'};
存储$global\u state、$state\u文件;
返回$global_state;
}
使用数据::转储;
dd-helper();
1.
use strict;
use warnings;

use Storable;

our $state_file = 'global.state';

sub helper {
    # Check to see if file last modified in 10 minutes.
    if (-e $state_file && -M $state_file < 1/24/6) {
        return retrieve($state_file);
    }

    #insert magic here to set the _global_state
    my $global_state = {'a'..'d'};

    store $global_state, $state_file;

    return $global_state;
}

use Data::Dump;
dd helper();

1;