在 Perl 中使用循环将参数传递给匿名数组
Pass parameters to anonymous array with loop in Perl
我在理解这个 Perl 模块时遇到问题,我是 Perl 的新手,主要逻辑在 ExternalLibrary::registerJob
中,它的执行如下所示,提到的 ExecutionBlock
是一个黑框对于我和我所知道的,我可以在 tasksequence
.
中列出几个 unitFunc()
tasksequence=>[
$ic->unitFunc('ExternalLibrary::registerJob', jobName=>'JOB1'),
$ic->unitFunc('ExternalLibrary::registerJob', jobName=>'JOB2'),
$ic->unitFunc('ExternalLibrary::registerJob', jobName=>'JOB3')
]
模块部分,这是我们应该使用的模板模式:
sub myFunc{
my %args=@_;
my $ic = $args{'initialcontext'};
my $basetasksequence = [
new ExecutionBlock(
initialcontext=>$ic,
tasksequence=>[
$ic->unitFunc('ExternalLibrary::registerJob')
]
)
];
my $runtasksequence = [
new ExecutionBlock(
initialcontext=>$ic,
tasksequence=>$basetasksequence
)
->errCallBack($ic->unitFunc('ExternalLibrary::logger', kind=>"J", status=>"F",RunTaskSequence=>$basetasksequence))
];
return { tasksequence=>$runtasksequence };
}
我想修改它,这样我就可以在那里传递多个 jobName
,registerJob
可以接受 jobName
作为参数,这是对我的提示。
$ic->unitFunc('ExternalLibrary::registerJob', jobName=>$jobName)
但是我不知道如何正确地循环这个问题,甚至不知道如何命名问题以便我可以查找问题并阅读主题。试图了解下落对我来说有点困难。
我可以从类似这样的循环中得到 jobName
:
my @res= $ic->DBHandler::sql(sql=>$statementQuery);
foreach my $list(@res){
$jobName = $list->{'JOB_NAME'};
}
但我不确定如何将它们组合在一起,是否可以 运行 像这样在数组中循环?
sub myFunc{
my %args=@_;
my $ic = $args{'initialcontext'};
my $basetasksequence = [
new ExecutionBlock(
initialcontext=>$ic,
tasksequence=>[
my @res= $ic->DBHandler::sql(sql=> $statementQuery);
foreach my $list(@res){
$jobName = $list->{'JOB_NAME'};
$ic->unitFunc('ExternalLibrary::registerJob', jobName=>$jobName)
}
]
)
];
my $runtasksequence = [
new ExecutionBlock(
initialcontext=>$ic,
tasksequence=>$basetasksequence
)
->errCallBack($ic->unitFunc('ExternalLibrary::logger', kind=>"J", status=>"F",RunTaskSequence=>$basetasksequence))
];
return { tasksequence=>$runtasksequence };
}
我想我需要另一个函数来 return 整个数组,然后将其分配给 tasksequence
,但我不知道如何保留所需的形式 ($ic->unitFunc()
)并正确传递。
如果我理解正确,问题可以总结如下:
I have an array of rows @res
. Each row is a reference to a hash with a JOB_NAME
element.
I want to do the following such that each row results in a task with jobName
given by the value of the row's JOB_NAME
element:
new ExecutionBlock(
initialcontext=>$ic,
tasksequence=>[
$ic->unitFunc('ExternalLibrary::registerJob', jobName=>'JOB1'),
$ic->unitFunc('ExternalLibrary::registerJob', jobName=>'JOB2'),
$ic->unitFunc('ExternalLibrary::registerJob', jobName=>'JOB3')
]
)
[]
创建一个数组,这就是我们要做的。
my @rows = $ic->DBHandler::sql(sql=>$statementQuery);
my @task_sequence;
for my $row (@rows) {
push @task_sequence,
$ic->unitFunc('ExternalLibrary::registerJob', jobName=>$row->{JOB_NAME});
}
new ExecutionBlock(
initialcontext=>$ic,
tasksequence=>\@task_sequence
)
我会使用以下更简单的解决方案:
new ExecutionBlock(
initialcontext=>$ic,
tasksequence=>[
map { $ic->unitFunc('ExternalLibrary::registerJob', jobName=>$_->{JOB_NAME}) }
$ic->DBHandler::sql(sql=>$statementQuery)
]
)
我在理解这个 Perl 模块时遇到问题,我是 Perl 的新手,主要逻辑在 ExternalLibrary::registerJob
中,它的执行如下所示,提到的 ExecutionBlock
是一个黑框对于我和我所知道的,我可以在 tasksequence
.
unitFunc()
tasksequence=>[
$ic->unitFunc('ExternalLibrary::registerJob', jobName=>'JOB1'),
$ic->unitFunc('ExternalLibrary::registerJob', jobName=>'JOB2'),
$ic->unitFunc('ExternalLibrary::registerJob', jobName=>'JOB3')
]
模块部分,这是我们应该使用的模板模式:
sub myFunc{
my %args=@_;
my $ic = $args{'initialcontext'};
my $basetasksequence = [
new ExecutionBlock(
initialcontext=>$ic,
tasksequence=>[
$ic->unitFunc('ExternalLibrary::registerJob')
]
)
];
my $runtasksequence = [
new ExecutionBlock(
initialcontext=>$ic,
tasksequence=>$basetasksequence
)
->errCallBack($ic->unitFunc('ExternalLibrary::logger', kind=>"J", status=>"F",RunTaskSequence=>$basetasksequence))
];
return { tasksequence=>$runtasksequence };
}
我想修改它,这样我就可以在那里传递多个 jobName
,registerJob
可以接受 jobName
作为参数,这是对我的提示。
$ic->unitFunc('ExternalLibrary::registerJob', jobName=>$jobName)
但是我不知道如何正确地循环这个问题,甚至不知道如何命名问题以便我可以查找问题并阅读主题。试图了解下落对我来说有点困难。
我可以从类似这样的循环中得到 jobName
:
my @res= $ic->DBHandler::sql(sql=>$statementQuery);
foreach my $list(@res){
$jobName = $list->{'JOB_NAME'};
}
但我不确定如何将它们组合在一起,是否可以 运行 像这样在数组中循环?
sub myFunc{
my %args=@_;
my $ic = $args{'initialcontext'};
my $basetasksequence = [
new ExecutionBlock(
initialcontext=>$ic,
tasksequence=>[
my @res= $ic->DBHandler::sql(sql=> $statementQuery);
foreach my $list(@res){
$jobName = $list->{'JOB_NAME'};
$ic->unitFunc('ExternalLibrary::registerJob', jobName=>$jobName)
}
]
)
];
my $runtasksequence = [
new ExecutionBlock(
initialcontext=>$ic,
tasksequence=>$basetasksequence
)
->errCallBack($ic->unitFunc('ExternalLibrary::logger', kind=>"J", status=>"F",RunTaskSequence=>$basetasksequence))
];
return { tasksequence=>$runtasksequence };
}
我想我需要另一个函数来 return 整个数组,然后将其分配给 tasksequence
,但我不知道如何保留所需的形式 ($ic->unitFunc()
)并正确传递。
如果我理解正确,问题可以总结如下:
I have an array of rows
@res
. Each row is a reference to a hash with aJOB_NAME
element.I want to do the following such that each row results in a task with
jobName
given by the value of the row'sJOB_NAME
element:new ExecutionBlock( initialcontext=>$ic, tasksequence=>[ $ic->unitFunc('ExternalLibrary::registerJob', jobName=>'JOB1'), $ic->unitFunc('ExternalLibrary::registerJob', jobName=>'JOB2'), $ic->unitFunc('ExternalLibrary::registerJob', jobName=>'JOB3') ] )
[]
创建一个数组,这就是我们要做的。
my @rows = $ic->DBHandler::sql(sql=>$statementQuery);
my @task_sequence;
for my $row (@rows) {
push @task_sequence,
$ic->unitFunc('ExternalLibrary::registerJob', jobName=>$row->{JOB_NAME});
}
new ExecutionBlock(
initialcontext=>$ic,
tasksequence=>\@task_sequence
)
我会使用以下更简单的解决方案:
new ExecutionBlock(
initialcontext=>$ic,
tasksequence=>[
map { $ic->unitFunc('ExternalLibrary::registerJob', jobName=>$_->{JOB_NAME}) }
$ic->DBHandler::sql(sql=>$statementQuery)
]
)