如何在Perl中同时迭代多个列表?

前端之家收集整理的这篇文章主要介绍了如何在Perl中同时迭代多个列表?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要创建一个文本文件(aptest.s),我可以用来读入另一个程序.我正在使用Perl,因为我有一个很大的列表可供使用.我的代码如下(它没有给出所需的输出显示代码和实际输出之后).任何帮助,将不胜感激.
  1. #!/usr/bin/perl -w
  2. chdir("D://projects//SW Model ODME");
  3. @link = ("319-116264||319-118664","320-116380||320-116846","321-119118||321-119119","322-115298||322-119087");
  4. @link1 = ("116264-319||118664-319","116380-320||116846-320","119118-321||119119-321","115298-322||119087-322");
  5. open (FSAS,">>aptest.s");
  6. foreach $link (@link) {
  7. foreach $link1 (@link1){
  8. print FSAS "other code \n";
  9. print FSAS "PATHLOAD SELECTLINK=(Link=".$link."),VOL[2]=MW[1] \n";
  10. print FSAS "PATHLOAD SELECTLINK=(Link=".$link1."),VOL[3]=MW[2] \n";
  11. print FSAS "other code \n";
  12. }
  13. }

实际产量:

  1. other output
  2. PATHLOAD SELECTLINK=(Link=319-116264||319-118664),VOL[2]=MW[1]
  3. PATHLOAD SELECTLINK=(Link=116264-319||118664-319),VOL[3]=MW[2]
  4. other output
  5.  
  6. other output
  7. PATHLOAD SELECTLINK=(Link=**319-116264||319-118664**),VOL[2]=MW[1]
  8. PATHLOAD SELECTLINK=(Link=**116380-320||116846-320**),VOL[3]=MW[2]
  9. other output

期望的输出

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

解决方法

请参阅 List::MoreUtils中的each_array:
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use warnings;
  5.  
  6. use List::MoreUtils qw( each_array );
  7.  
  8. my @x = qw( A B C D E F );
  9. my @y = (10,11,12,13,14,15);
  10.  
  11. my $it = each_array( @x,@y );
  12. while ( my ($x,$y) = $it->() ) {
  13. print "$x = $y\n";
  14. }
  15. __END__

猜你在找的Perl相关文章