perl,从文件输入,数组输入或无输入的子例程调用填充哈希

时间:2016-10-14 21:31:18

标签: perl class hash subroutine

我按照以下方式制作了课程:

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);
}

}

1 个答案:

答案 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;