我遇到了麻烦 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基本问题
我会非常感谢你的答案。
谢谢:))
答案 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;
。这两个语句将向您显示代码中最常见的错误。