我怎么可以遍历多个列表在Perl的同一时间? [英] How can I iterate over multiple lists at the same time in Perl?

查看:200
本文介绍了我怎么可以遍历多个列表在Perl的同一时间?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要创建一个文本文件中的(aptest.s)的伊灿用来读取到另一个程序。我使用Perl,因为我有一个大名单,从工作。我的code是如下(不得到所需要的输出 - 后code和实际输出所示)。任何帮助将是AP preciated。

 #!的/ usr / bin中/ perl的-w
CHDIR(D:// //项目模型SW ODME);
@link = (\"319-116264||319-118664\",\"320-116380||320-116846\",\"321-119118||321-119119\",\"322-115298||322-119087\");
@ LINK1 = (\"116264-319||118664-319\",\"116380-320||116846-320\",\"119118-321||119119-321\",\"115298-322||119087-322\");
开(FSAS,>> aptest.s);
的foreach $链接(@link){
    的foreach $ LINK1(@链接1){
    打印FSAS等code \\ N的;
    打印FSASPATHLOAD SELECTLINK =(链接=$连结。。),VOL [2] = MW [1] \\ N的;
    打印FSASPATHLOAD SELECTLINK =(链接=$ LINK1。),VOL [3] = MW [2] \\ N的;
    打印FSAS等code \\ N的;
}
}

实际输出

 其他输出
PATHLOAD SELECTLINK =(链接= 319-116264 || 319-118664),VOL [2] = MW [1]
PATHLOAD SELECTLINK =(链接= 116264-319 || 118664-319),VOL [3] = MW [2]
其他输出其他输出
PATHLOAD SELECTLINK =(链接= ** 319-116264 || 319-118664 **),VOL [2] = MW [1]
PATHLOAD SELECTLINK =(链接= ** 116380-320 || 116846-320 **),VOL [3] = MW [2]
其他输出

所需的输出

 其他输出
PATHLOAD SELECTLINK =(链接= 319-116264 || 319-118664),VOL [2] = MW [1]
PATHLOAD SELECTLINK =(链接= 116264-319 || 118664-319),VOL [3] = MW [2]
其他输出其他输出
PATHLOAD SELECTLINK =(链接= ** 320-116380 || 320-116846 **),VOL [2] = MW [1]
PATHLOAD SELECTLINK =(链接= ** 116380-320 || 116846-320 **),VOL [3] = MW [2]
其他输出


解决方案

请参阅 each_array 中的列表:: MoreUtils 的:

 #!的/ usr / bin中/ perl的使用严格的;
使用警告;使用List :: MoreUtils QW(each_array);我@x = QW(A B C D E F);
我的@y =(10,11,12,13,14,15);我的$ IT = each_array(@x,@y);
而(我($ X,$ Y)= $ IT->()){
    打印$ X = $ Y \\ N的;
}
__结束__

I need to create a text file (aptest.s) that Ican use to read into another program. I am using Perl because I have a large list to work from. My code is as follows (which does not give the desired output - shown after code and actual output). Any help would be appreciated.

#!/usr/bin/perl -w
chdir("D://projects//SW Model ODME");
@link = ("319-116264||319-118664","320-116380||320-116846","321-119118||321-119119","322-115298||322-119087");
@link1 = ("116264-319||118664-319","116380-320||116846-320","119118-321||119119-321","115298-322||119087-322");
open (FSAS, ">>aptest.s");
foreach $link (@link) {
    foreach $link1 (@link1){
    print FSAS "other code \n";
    print FSAS "PATHLOAD SELECTLINK=(Link=".$link."), VOL[2]=MW[1] \n";
    print FSAS "PATHLOAD SELECTLINK=(Link=".$link1."), VOL[3]=MW[2] \n";
    print FSAS "other code \n";
}
}

Actual Output :

other output
PATHLOAD SELECTLINK=(Link=319-116264||319-118664), VOL[2]=MW[1] 
PATHLOAD SELECTLINK=(Link=116264-319||118664-319), VOL[3]=MW[2] 
other output 

other output
PATHLOAD SELECTLINK=(Link=**319-116264||319-118664**), VOL[2]=MW[1] 
PATHLOAD SELECTLINK=(Link=**116380-320||116846-320**),      VOL[3]=MW[2] 
other output

Desired Output

other output
PATHLOAD SELECTLINK=(Link=319-116264||319-118664), VOL[2]=MW[1] 
PATHLOAD SELECTLINK=(Link=116264-319||118664-319), VOL[3]=MW[2] 
other output

other output
PATHLOAD SELECTLINK=(Link=**320-116380||320-116846**), VOL[2]=MW[1] 
PATHLOAD SELECTLINK=(Link=**116380-320||116846-320**), VOL[3]=MW[2] 
other output

解决方案

See each_array in List::MoreUtils:

#!/usr/bin/perl

use strict;
use warnings;

use List::MoreUtils qw( each_array );

my @x = qw( A B C D E F );
my @y = (10, 11, 12, 13, 14, 15);

my $it = each_array( @x, @y );
while ( my ($x, $y) = $it->() ) {
    print "$x = $y\n";
}
__END__

这篇关于我怎么可以遍历多个列表在Perl的同一时间?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆