2014-10-08 2 views
1

Я попытался сопоставить данные с символом новой строки и некоторыми другими данными, но не работал. Мой Perl кодКак сопоставить данные с новой строкой.?

open(data,"filename"); 
@file = <data>; 
@get = grep{m/^\>.*\n.*/} @file; 
print "$get[1]"; 

Мой файл как этот

>1AA7 
LSLLSEVESFVLSVVPSGPLKAEVAQKLEEVFAGKQSELEVLLEFLKSKPVLSPLSKGVLGFVFSLSVPSEKGLQKKKFVQQALQGQGEPQQLEKAVKLFK 

>1ABV 
SEFVSVAKPFAKAAFEFAVEKQSVEKFQELLAFAAEVSKQEQLAELLSGALAPESLAESFVAVCGEQLEEQGQQLVKVLAEQGKLQALPEVLEQFVKLKAVSEASAEVEVVSAAALSEQQLAKVSAALEKKLSK 

>1AEP 
AAGKVQVAEAVQQLQKSVVQAAKELKESLGLPSPEEALQLLSEQAQAFKSKVAEVSSSLKQEAEKKQGSVAEQLQAFAKQLQQSVKEAASSLQLQEQLQSLQSALSQVGKQFQEVASKSQASAQEAFAPVQSALQEAAEKSKEAAAQLQQSVQSAVQKPAQ 

В этой программе дает выход только >1ABV не работает в \n и другой Charactor в моем коде. Но я ожидаю, что вывод этого кода

>1ABV 
SEFVSVAKPFAKAAFEFAVEKQSVEKFQELLAFAAEVSKQEQLAELLSGALAPESLAESFVAVCGEQLEEQGQQLVKVLAEQGKLQALPEVLEQFVKLKAVSEASAEVEVVSAAALSEQQLAKVSAALEKKLSK 

ответ

1

Похоже, вам нужен режим абзаца для чтения.

Вы можете получить, что путем изменения $INPUT_RECORD_SEPARATOR:

use strict; 
use warnings; 

local $/ = ''; # Paragraph mode 

my @data = <DATA>; 

print $data[0]; 

__DATA__ 
>1AA7 
LSLLSEVESFVLSVVPSGPLKAEVAQKLEEVFAGKQSELEVLLEFLKSKPVLSPLSKGVLGFVFSLSVPSEKGLQKKKFVQQALQGQGEPQQLEKAVKLFK 

>1ABV 
SEFVSVAKPFAKAAFEFAVEKQSVEKFQELLAFAAEVSKQEQLAELLSGALAPESLAESFVAVCGEQLEEQGQQLVKVLAEQGKLQALPEVLEQFVKLKAVSEASAEVEVVSAAALSEQQLAKVSAALEKKLSK 

>1AEP 
AAGKVQVAEAVQQLQKSVVQAAKELKESLGLPSPEEALQLLSEQAQAFKSKVAEVSSSLKQEAEKKQGSVAEQLQAFAKQLQQSVKEAASSLQLQEQLQSLQSALSQVGKQFQEVASKSQASAQEAFAPVQSALQEAAEKSKEAAAQLQQSVQSAVQKPA 

Выходы:

>1AA7 
LSLLSEVESFVLSVVPSGPLKAEVAQKLEEVFAGKQSELEVLLEFLKSKPVLSPLSKGVLGFVFSLSVPSEKGLQKKKFVQQALQGQGEPQQLEKAVKLFK 

Live Demo

Примечание: индексы массивов начинаются с 0 в Perl.

+0

@Miler: Спасибо. пожалуйста, объясните этот код 'local $/= '';' –

+0

Прочтите [связанный с документами] (http://perldoc.perl.org/perlvar.html#%24INPUT_RECORD_SEPARATOR). В первом абзаце объясняется. – Miller

+0

@Miller: Невозможно использовать обычную экспансию. – mkHun

1

Если вы хотите прочитать содержимое, разделенные несколькими символами новой строки в массив,

use strict; 
use warnings; 
use autodie; 

my @get = do { 
    open(my $data, "<", "filename"); 
    local $/ = ""; 
    <$data>; 
}; 

От perldoc perlvar

$/

[...] Установка "" будет обрабатывать две или более последовательных пустых строк как одну пустую строку.