【问题标题】:how to load all the file in a variable [duplicate]如何将所有文件加载到变量中[重复]
【发布时间】:2013-09-01 19:37:56
【问题描述】:

我正在尝试从包含字符串的文件中提取子字符串。 文件是这样的:

    >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 来提取子字符串。 我知道这听起来是一个微不足道的问题,但你能帮我吗? 谢谢...

【问题讨论】:

标签: perl


【解决方案1】:

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

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

将所有文件读入数组:

my @array = <$my_fh>;

【讨论】:

    【解决方案2】:

    看起来你想啜饮。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-05-24
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-29
      • 2011-05-25
      相关资源
      最近更新 更多