我希望创建一个循环,允许我使用更少的代码行来使用 Perl 更改设置文件。目前,我的代码读取 XML 文件并找到设置 ID,并用新的 ID 替换该 ID 中的设置值。目前的请求涉及到对设置文件的修改较多,且代码很长。我已在数组中设置了值,并在数组中设置了设置 ID。像这样:
@GreetGoalDP1 = (3, 5, 7, 10);
@GreetSIDSunDP1 = ('//xsd:Settings/xsd:Setting[@SID="7012"]/xsd:Value',
'//xsd:Settings/xsd:Setting[@SID="7013"]/xsd:Value',
'//xsd:Settings/xsd:Setting[@SID="7014"]/xsd:Value',
'//xsd:Settings/xsd:Setting[@SID="7015"]/xsd:Value');
并运行以下命令。
my($matchSunDP1G1) = $xpc->findnodes($GreetSIDSunDP1[0]);
$matchSunDP1G1->removeChildNodes();
$matchSunDP1G1->appendText($GreetGoalDP1[0]);
#GreetB
my($matchSunDP1G2) = $xpc->findnodes($GreetSIDSunDP1[1]);
$matchSunDP1G2->removeChildNodes();
$matchSunDP1G2->appendText($GreetGoalDP1[1]);
#GreetC
my($matchSunDP1G3) = $xpc->findnodes($GreetSIDSunDP1[2]);
$matchSunDP1G3->removeChildNodes();
$matchSunDP1G3->appendText($GreetGoalDP1[2]);
#GreetD
my($matchSunDP1G4) = $xpc->findnodes($GreetSIDSunDP1[3]);
$matchSunDP1G4->removeChildNodes();
$matchSunDP1G4->appendText($GreetGoalDP1[3]);
我想通过仅使用数组 [0] - [3] 的循环来运行这些更改,直到完成,因为我必须多次执行相同的 4 组操作。我对循环数组不太熟悉。这是我可以用 Perl 做的事情吗?如果是这样,最有效的方法是什么?
最佳答案
一个简单的例子
use warnings;
use strict;
...
for my $i (0..$#GreetGoalDP1) {
my ($matchSunDP1G) = $xpc->findnodes( $GreetSIDSunDP1[$i] );
$matchSunDP1G->removeChildNodes();
$matchSunDP1G->appendText( $GreetGoalDP1[$i] );
}
我认为您不需要所有这些单独的 $matchSunDP1G1
等。假设两个数组始终具有相同的长度,并且它们的元素在相同索引处成对需要。
语法$#aryname
用于数组@aryname
中的最后一个索引,..
是range operator ,因此 0 .. $#GreetGoalDP1
对于您的示例来说是列表 0,1,2,3
。
还有一些库可以帮助并行使用多个数组,当事情变得更困惑或更复杂时,它们特别有用。使用迭代器的示例
use List::MoreUtils qw(each_array);
my $it = each_array @GreetSIDSunDP1, @GreetGoalDP1;
while ( my ($sidsun, $goal) = $it->() ) {
my ($matchSunDP1G) = $xpc->findnodes($sidsun);
$matchSunDP1G -> removeChildNodes();
$matchSunDP1G -> appendText( $goal );
}
如果列表的大小不均匀,迭代器将继续遍历较长列表的长度。较短的一个耗尽后,其可能的值为 undef
。
关于arrays - 如何迭代多个 Perl 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69456675/