我按照以下方式制作了课程:
package Tool;
sub new {
my ( $class, %args ) = @ARG;
my $self = bless {
#hash reference
_ToolParameters => { }
}, $class;
return $self;
}
然后我想创建这个类的实例:
my $Object = Tool->new();
然后,我想从文本文件或数组中读取以填充哈希并按如下方式调用它:
from an array: $Object->ImportData(\@Arraylist);
from a textfile: $Object->ImportData(textfile.csv);
在这个函数ImportData中,我想从数组列表中读取我的密钥,该数组列表将严格地是ID#,或者从CSV文件中读取,它严格地是第一列,即ID#或者能够手动插入值:
*我希望ID#=密钥。
我还想到默认情况下还会为此密钥生成至少一个参数字段,并为其指定默认值0。
基本上,当我从这个列表中返回时,我之前会有ikegami建议的内容,例如:
$self->{_ToolParameters}{$ID#1}{test_parameter_1} = $value;
$self->{_ToolParameters}{$ID#2}{test_parameter_1} = $value;
如果我接受数组,输入如下:
@Arraylist = (key1 ,..., keyN);
因为这是一个更大的计划的一部分,我计划通过一系列的' X'来运行每个密钥。测试套件,这些测试套件我打算给出名称" parameterX",X是测试套件的编号。我把第一个测试套件作为给定的,所以我想要的输出应该是在对象中,我默认有(在推送更多参数之前):
*the default value for the 'value' is zero, because I have not run the testsuite, I am just initializing the field
key1 -> first_test ->0
key2 -> first_test ->0
.
.
keyN -> first_test -> 0
(key) (test_parameter_1) (value of test_parameter_1)
我希望将其返回给对象,以便稍后我可以将更多测试传递给哈希,例如我可以拥有:
key1 -> first_test -> 0
-> second_test -> 0
同样,从文本文件中,我所关心的只是代表键或ID的列。
我想我的困惑是如何可靠地进行这项任务,以便我有一个包含可扩展的有价值配对列表的对象,但写出来帮助我解决了很多问题。
这是我需要一些指导的地方。
sub ImportData{
my $a = shift;
if($a eq /*.csv$/i )
{ #textfile case
my @get_first_col = some kind of column dump; #keys, probably a while loop
foreach $key (@get_first_col)
{
push($self->{_ToolParameters}{$key}{test_parameter_1} = 0);
}
}
elseif($a)
{ #array case - want to reliably check if we're handling an array
foreach (@{a})
{
push($self->{_ToolParameters}{$_}{test_parameter_1} = 0);
}
}
else
{#case of manual input
my $a = <STDIN>
push($self->{_ToolParameters}{$_}{test_parameter_1} = 0);
}
}
答案 0 :(得分:1)
目前还不清楚你想要什么。
制作
{
key1 => {
parameter1 => 0,
parameter2 => 0,
},
key2 => {
parameter1 => 0,
parameter2 => 1,
},
}
给定的
my @rows = (
[ 'key1', 0, 0 ],
[ 'key2', 0, 1 ],
);
你想要
$self->{$key}{parameter1} = $parameter;
$self->{$key}{parameter2} = $parameter2;
或
$self->{_ToolParameters}{$key}{parameter1} = $parameter;
$self->{_ToolParameters}{$key}{parameter2} = $parameter2;