Я сделал класс следующим образом:Perl, заселение хэш от вызова подпрограммы на входе файла, ввод массива или без ввода
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);
в этом function ImportData, я хотел бы прочитать мой ключ из списка массивов, который будет строго соответствовать ID # или из файла CSV, это будет строго первый столбец, который является идентификатором # или может вставлять значения вручную :
* Я хочу, чтобы ID # = ключ.
Я имею в виду также генерации, по меньшей мере, одно поле параметров для этого ключа по умолчанию, и присвоение ему значение 0.
по умолчанию В принципе, когда я вернусь из этого списка я есть, что предложенное ранее Ikegami , как:
$self->{_ToolParameters}{$ID#1}{test_parameter_1} = $value;
$self->{_ToolParameters}{$ID#2}{test_parameter_1} = $value;
Если я принимать массив, вход следующим образом:
@Arraylist = (key1 ,..., keyN);
как это является частью более крупной программы, я планирую запустить каждый KE y через ряд наборов тестов 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
Аналогично, из текстового файла, мне все равно, о которых столбцы, которые представляют собой ключи, или идентификаторы.
Я предполагаю, что мое замешательство заключалось в том, как сделать это задание надежно таким, чтобы у меня был объект, содержащий список расширяемых значащих пар, но написание этого помогло мне решить большую часть этого.
Это то, где мне нужно руководствоваться.
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);
}
}
Можете ли вы показать й e структура данных, в которую вы попадаете? – melpomene
Почему бы не сделать одно из полей объекта хешем, который отображает '$ key' в' [$ parameter, $ parameter2] '? – melpomene
отображает входной текстовый файл (краткий пример). @ikegami имеет это, ответ просто нуждается в некоторых реальных входных данных – stevieb