如何从Input中依次读取数组行

时间:2016-10-22 18:43:38

标签: arrays perl

我遇到了麻烦 with array,如何从Input中依次读取数组行。 这是我的代码。

sites.txt :(输入文件)

site1
site2
site3

程序

#!/usr/bin/perl


my $file = 'sites.txt';
open(my $fh, '<:encoding(UTF-8)', $file)
     or die "Couldn't open file !'$file' $!";

my @rows = <$fh>;
chomp @rows;
foreach my $site (@rows) {
    $sitename    = $site;
    @domains     = qw(.com .net .org);
    foreach $dns (@domains){
        $domain = $dns;
        print "$site$dns\n";
    }
}

,输出就像这样

site1.com
site1.net
site1.org
site2.com
site2.net
site2.org
site3.com
site3.net
site3.org

直到那时我才明白,但我想让它成为@domains中数组的第一个元素 阅读直到输入行结束, 然后循环回到Input的第1行并转到数组的下一个元素 输出就像这样,

site1.com
site2.com
site3.com
site1.net
site2.net
site3.net
site1.org
site2.org
site3.org
有可能吗?或需要另一个module.sorry基本问题 我会非常感谢你的答案。 谢谢:))

1 个答案:

答案 0 :(得分:1)

您正在遍历所有网站,然后(针对每个网站)将域添加到当前网站。

在伪代码中,这是:

foreach site
    foreach domain
       print site + domain

交换循环以使逻辑

foreach domain
    foreach site
        print site + domain

请注意,这是伪代码,而不是Perl。

真实&#34; Perl看起来像:

#!/usr/bin/env perl

use strict;
use warnings;

my $file = 'sites.txt';
open( my $fh, '<:encoding(UTF-8)', $file )
  or die "Couldn't open file !'$file' $!";

my @rows = <$fh>;
chomp @rows;

my @domains = qw(.com .net .org);

foreach my $dns (@domains) {
    foreach my $site (@rows) {
        print "$site$dns\n";
    }
}

输出

site1.com
site2.com
site3.com
site1.net
site2.net
site3.net
site1.org
site2.org
site3.org

始终在您的脚本之上加入use strict;use warnings;。这两个语句将向您显示代码中最常见的错误。