如何使用Perl将字符串的长度存储到数组中

时间:2016-11-21 17:43:35

标签: regex perl

我有一个文件,其中包含一系列由A,C,C,G和T组成的行。我想找到这些行的长度,列出culmultive长度(按顺序添加长度),并将其放入数组中。到目前为止,我有:

#! /usr/bin/perl -w
use strict;

my $input = $ARGV[0];
my %idSeq;
my (@ID, @Seq);

open (my $INPUT, "<$input") or die "unable to open $input";

while (<$INPUT>) {
    if (my $culm_length = /^([AGCT]\w+)\n$/) {
    length($culm_length) = $_;  
    push (@Seq, $1);

    }    
}
bla bla bla....

到目前为止,我认为我写的内容给了我一系列单行的长度。我想要一些长篇大论,有什么想法吗?

2 个答案:

答案 0 :(得分:2)

参考上一个被搁置的问题How do I read strings into a hash in Perl,我想也许你想要一个运行总计行的长度

我会这样写。它将运行总计保持在$total并在每次更改时将其值推送到@lengths数组

use strict;
use warnings 'all';

my ( $input ) = @ARGV;

open my $fh, '<', $input or die qq{unable to open "$input" for input: $!};

my @lengths;
my $total = 0;

while ( <$fh> ) {
    push @lengths, $total += length $1 if /^([ACGT]+)/;
}

答案 1 :(得分:1)

#!/usr/bin/perl -w
use strict;

my $length = 0;
while (<>) {
   $length += length($1) if /^([AGCT]\w+)$/;
}

my @length = $length;  # But why would you want to do this?!

...