如何加载变量中的所有文件

时间:2013-08-29 11:30:40

标签: perl

我正在尝试从包含字符串的文件中提取子字符串。 该文件类似于:

    >scaffold30     24194
    CTTAGCAGCAGCAGCAGCAGTGACTGAAGGAACTGAGAAAAAGAGCGAGCTGAAAGGAAGCATAGCCATTTGGGAGTGCCAGAGAGTTGGGAGG GAGGGAGGGCAGAGATGGAAGAAGAAAGGCAGAAATACAGGGAGATTGAGGATCACCAGGGAG.........
    .................

为了提取子串我使用的是一个坐标为子串开始和结束的文件。 我写的脚本是:

open my $coords_info, $coords_file or die "Could not open $coords_file: $!";
open my $chr_info, $chrom or die "Could not open $chrom: $!";
my $count = 0;


while(my $sline = <$chr_info>) {
    if ($sline!~ m/^>/) {
            chomp $sline;
            print $sline;
    foreach(my $cline = <$coords_info>) {
            my@data = split('\t', $cline);
            my $start = $data[0];
            my $end = $data[1];
            my $offset = $end - $start;
           $count++;
           my $sub = substr($sline, $start+1, $offset);
           print ">conserved $count\n";
           print $sub;
            }
    }
}

我的问题是我想将文件的所有字符串加载到sline变量(而不是在每次迭代时逐行加载,然后是foreach来提取子字符串。 我知道这听起来很简单,但你可以帮我吗? 谢谢......

2 个答案:

答案 0 :(得分:3)

读取一个字符串变量中的所有文件:

{
   local $/ = undef;
   $variable = <$my_fh>;
}

将所有文件读取到数组:

my @array = <$my_fh>;

答案 1 :(得分:2)

看起来你想要啜饮。

Perl Maven post致力于Slurp原则。它解释了如何从头开始或使用File::Slurp module from CPAN模块实现它。

另一种方法是使用这种单行explained by Chromatic

my $contents = do { local $/ = <$fh> };

Perl6::Slurp模块也是实现Perl 6 slurp 内置函数的便捷方式。