我编写了一个基本的Perl脚本,用于生成一组单词的所有可能的唯一组合:
use Algorithm::Combinatorics qw(combinations);
my $strings = [qw(GGGG CCCC TTTT AAAA)];
my $iter = combinations($strings, 2);
while (my $c = $iter->next) {
print "@$c\n";
}
我想知道是否有人可能指出我如何从.txt文件加载字符串而不是手动添加它们(GGGG CCCC TTTT AAAA等)。我应该声明我对Perl很新。
我也想知道是否有人能解释为什么输出在单词之间包含空格:
GGGG CCCC
GGGG TTTT
GGGG AAAA
CCCC TTTT
CCCC AAAA
TTTT AAAA
这是由于我将字符串分开的方式吗?
更新:
只是为了更新RE:从.txt文件导入并把它放在这里,它可以帮助任何其他初学者,我已经写过,现在正在使用它:
open (my $data, "<", "test.txt") or die "There was a problem opening: $!";
my @primers = <$data>;
close $data;
chomp @primers;
use strict; use warnings;
use Algorithm::Combinatorics qw(combinations);
my $strings = \@primers;
my $iter = combinations($strings, 2);
while (my $c = $iter->next) {
print "@$c\n";
}
答案 0 :(得分:1)
根据建议你可以通过各种链接建议如何写入文件..!此外,你正在获得两者之间的拼写,因为你在字符串上下文中打印一个数组(称为stringfying it)
答案 1 :(得分:1)
至于你的空格:方法$iter->next
似乎返回一个包含两个值的数组引用。在第一行中,即[ 'GGGG', 'CCCC' ]
。如果将数组放入字符串(print "@foo"
)中,则会对其进行字符串化。这意味着,所有元素将连接成一个字符串。 Perl使用变量$"
来进行连接。
print "@$c\n";
与说法相同:
print join( $", @{ $c }) . "\n";
默认情况下,$"
包含一个空格()。
您可以在perldoc perlvar的$"
上阅读。以下是它的说法:
$"
将数组或数组切片插入到a中 双引号字符串或类似的上下文,例如/.../
元素由此值分隔。默认是一个空格。例如, 这样:print "The array is: @array\n";
相当于:
print "The array is: " . join($", @array) . "\n";
助记符:在双引号上下文中工作。