[hard_filters]
usage=array
arraycount=2
yrsexp=23:24;33:56;54:55;34:35
我正在尝试使用Config::Tiny
从配置文件中读取值。获得值usage
,arraycount
,yrsexp
后。如果usage
的值为array
,则根据arraycount,它应生成最小值和最大值对:
$yrs = "min='23,54',max='24,55'";
如果usage
不是array
,则不应该计算数组。从yrsexp
它应该选择一个随机的单对。
$yrs = "min='33',max='56'";
答案 0 :(得分:2)
这个简短的程序可以满足您的要求。它使用List::Util
模块中的shuffle
随机化yrsexp
列表,然后再使用它。处理usage
不是 array
的案例是相同的,但arraycount
设置为1。
use strict;
use warnings;
use Config::Tiny;
use List::Util 'shuffle';
my $cfg = Config::Tiny->read('config.cfg');
my $hf = $cfg->{hard_filters};
my @yrsexp = shuffle map [ split /:/ ], split /;/, $hf->{yrsexp};
my $count = $hf->{usage} eq 'array' ? $hf->{arraycount} : 1;
my @sample = @yrsexp[0..$count-1];
my $yrs = sprintf "min='%s',max='%s'",
join(',', map $_->[0], @sample),
join(',', map $_->[1], @sample);
print $yrs, "\n";
<强>输出强>
min='33,23',max='56,24'
答案 1 :(得分:0)
您可以用分号分隔yrsexp的值,然后使用Perl的 rand 函数来随机化索引。
这样的事情:
my @years = split ';', $yrs_exp;
my $rand_index = int(rand(scalar @years)); # Returns 0 up to size of @years - 1
my $rand_value = $years[$rand_index];