2014-01-08 9 views
1

я написал базовый сценарий Perl для создания всех возможных уникальных комбинаций набора слов:Загрузка слов/строк из файла .txt

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

http://perldoc.perl.org/perlopentut.html – Quentin

+0

Спасибо за отличную ссылку! – AnnaSchumann

+0

Что касается файла, вы должны прочитать ссылку Квентина и попробовать. Если у вас возникли проблемы, вернитесь и создайте новый, конкретный вопрос. – simbabque

ответ

1

Что касается ваших пробелов: метод $iter->next, похоже, возвращает массив ref, содержащий два значения. В первой строке это [ 'GGGG', 'CCCC' ]. Если вы помещаете массив в строку (print "@foo"), он становится стрифицированным. Это означает, что все элементы будут объединены в одну строку. Perl использует переменную $", чтобы выполнить соединение.

print "@$c\n"; 

такая же, как говорят:

print join($", @{ $c }) . "\n"; 

По умолчанию $" содержит пробел ().


Вы можете прочитать на $" в perldoc perlvar. Вот что он говорит:

$" Когда массив или срез массива интерполирован в двойные кавычки или аналогичный контекст такого как /.../, его элементов разделены на этой величине. Значение по умолчанию - это пробел. Например, это:

print "The array is: @array\n"; 

эквивалентно следующему:

print "The array is: " . join($", @array) . "\n"; 

Мнемоника: работает в двойных кавычках контексте.

+0

Спасибо за очень информативный ответ! – AnnaSchumann

+0

Я заменил свою исходную строку следующим образом: print join ('', @ $ c). "\ N"; – AnnaSchumann

1

Как вы можете предложить различные ссылки, предлагающие как писать в файл ..! Кроме того, вы получаете speces между ними, потому что вы печатаете массив в контексте строки (известный как stringfying it)

Смежные вопросы