我正在尝试从包含字符串的文件中提取子字符串。 该文件类似于:
>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来提取子字符串。 我知道这听起来很简单,但你可以帮我吗? 谢谢......
答案 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 内置函数的便捷方式。