perl if eq语句在数组中不起作用
我有一根绳子perl if eq语句在数组中不起作用,perl,Perl,我有一根绳子 $seq1= 'ATCGATGCAATTCCGGAAAAAATTTTCCCGGGGGGGAAACCCGGGAAATTT' 所以我想从这个字符串中的用户输入中找到char的频率 所以我把这个字符串改为数组 $base= <STDIN>; # you can input A or T or C or G my @Freq1= split //, $seq1; $base=;#您可以输入A、T、C或G my@Freq1=split/,$seq1; 然后使用for循环计
$seq1= 'ATCGATGCAATTCCGGAAAAAATTTTCCCGGGGGGGAAACCCGGGAAATTT'
所以我想从这个字符串中的用户输入中找到char的频率
所以我把这个字符串改为数组
$base= <STDIN>; # you can input A or T or C or G
my @Freq1= split //, $seq1;
$base=;#您可以输入A、T、C或G
my@Freq1=split/,$seq1;
然后使用for循环计算字符总数
for(my $i=0;$i<@Freq1;$i++) {
if($Freq1[$i] eq chomp($base)) {
print "equals $i\n";
$numberbase++;
}
}
for(my$i=0;$i返回删除的总字符数,因此只需咀嚼输入一次并直接比较即可
chomp($base);
for(my $i=0;$i<@Freq1;$i++)
{
if($Freq1[$i] eq $base)
{
print "equals $i\n";
$numberbase++;
}
}
chomp($base);
for(my$i=0;$i返回移除的总字符数,因此只需咀嚼输入一次并直接比较即可
chomp($base);
for(my $i=0;$i<@Freq1;$i++)
{
if($Freq1[$i] eq $base)
{
print "equals $i\n";
$numberbase++;
}
}
chomp($base);
对于(my$i=0;$i如果您只想知道发生的次数,可以执行以下操作:
chomp $base;
my $numberbase = ($seq1 =~ s/$base/$base/g);
如果您只想知道发生的次数,可以执行以下操作:
chomp $base;
my $numberbase = ($seq1 =~ s/$base/$base/g);
如果要计算字符串中某个子字符串的出现次数,可以使用所谓的=()=
(中间有一组括号的两个等号)
使用严格;
使用警告;
my$seq1='ATCGATGCAATTCCGGAATTCCCGGGGGAAACCCGGGAATTT';
chomp(我的$base=);#用户输入
我的$count=()=$seq1=~/$base/g;
打印“$base在序列中显示$count次\n”;
例如,这将为a
输出16个计数
其工作方式是,带有/g
修饰符的正则表达式可以返回列表或迭代器,具体取决于上下文。我们需要列表,因此我们强制执行列表上下文,这就是空括号所做的。然后$count
变量赋值在列表上强制执行标量上下文,在本例中使其返回元素的计数。如果要计算字符串中子字符串的出现次数,可以使用所谓的=()=
(中间有一组括号的两个等号)
使用严格;
使用警告;
my$seq1='ATCGATGCAATTCCGGAATTCCCGGGGGAAACCCGGGAATTT';
chomp(我的$base=);#用户输入
我的$count=()=$seq1=~/$base/g;
打印“$base在序列中显示$count次\n”;
例如,这将为a
输出16个计数
其工作方式是,带有/g
修饰符的正则表达式可以返回列表或迭代器,具体取决于上下文。我们需要列表,因此我们强制执行列表上下文,这就是空括号所做的。然后$count
变量赋值在列表上强制执行标量上下文,在本例中使其返回它的元素计数。您也可以使用音译来完成此任务,这可能比在每个基上循环更快
#!/usr/bin/env perl
use strict;
use warnings;
my $seq = 'ATCGATGCAATTCCGGAAAAAATTTTCCCGGGGGGGAAACCCGGGAAATTT';
my $count = ($seq =~ tr/Aa//);
print "A is seen $count times.\n";
或者,您可以使用BioPerl获取序列统计信息
#!/usr/bin/env perl
use strict;
use warnings;
use Bio::Tools::SeqStats;
my $seqobj = Bio::PrimarySeq->new( -seq => 'ATCGATGCAATTCCGGAAAAAATTTTCCCGGGGGGGAAACCCGGGAAATTT',
-alphabet => 'dna',
-id => 'test' );
my $seq_stats = Bio::Tools::SeqStats->new( -seq => $seqobj );
my $hash_ref = $seq_stats->count_monomers();
for my $base (sort keys %$hash_ref) {
print "Number of bases of type ", $base, " = ", $hash_ref->{$base},"\n";
}
输出:
Number of bases of type A = 16
Number of bases of type C = 10
Number of bases of type G = 14
Number of bases of type T = 11
您还可以使用音译来完成此任务,这可能比在每个基础上循环要快
#!/usr/bin/env perl
use strict;
use warnings;
my $seq = 'ATCGATGCAATTCCGGAAAAAATTTTCCCGGGGGGGAAACCCGGGAAATTT';
my $count = ($seq =~ tr/Aa//);
print "A is seen $count times.\n";
或者,您可以使用BioPerl获取序列统计信息
#!/usr/bin/env perl
use strict;
use warnings;
use Bio::Tools::SeqStats;
my $seqobj = Bio::PrimarySeq->new( -seq => 'ATCGATGCAATTCCGGAAAAAATTTTCCCGGGGGGGAAACCCGGGAAATTT',
-alphabet => 'dna',
-id => 'test' );
my $seq_stats = Bio::Tools::SeqStats->new( -seq => $seqobj );
my $hash_ref = $seq_stats->count_monomers();
for my $base (sort keys %$hash_ref) {
print "Number of bases of type ", $base, " = ", $hash_ref->{$base},"\n";
}
输出:
Number of bases of type A = 16
Number of bases of type C = 10
Number of bases of type G = 14
Number of bases of type T = 11
这里没有理由不显示所有计数
使用散列保留所有四个基数的计数,然后在循环中显示其内容
use strict;
use warnings;
my $seq1 = 'ATCGATGCAATTCCGGAAAAAATTTTCCCGGGGGGGAAACCCGGGAAATTT';
my %counts;
$counts{$_} += 1 for split //, $seq1;
printf "%s => %d\n", $_, $counts{$_} // 0 for qw/ A C G T /;
输出
A => 16
C => 10
G => 14
T => 11
这里没有理由不显示所有计数
使用散列保留所有四个基数的计数,然后在循环中显示其内容
use strict;
use warnings;
my $seq1 = 'ATCGATGCAATTCCGGAAAAAATTTTCCCGGGGGGGAAACCCGGGAAATTT';
my %counts;
$counts{$_} += 1 for split //, $seq1;
printf "%s => %d\n", $_, $counts{$_} // 0 for qw/ A C G T /;
输出
A => 16
C => 10
G => 14
T => 11
或者对于不同的(或多或少“丑陋”)版本,将其全部计算在内:
use strict; use warnings;
use Data::Dumper;
my $seq1 = 'ATCGATGCAATTCCGGAAAAAATTTTCCCGGGGGGGAAACCCGGGAAATTT';
my %u;
$seq1 =~ s/./$u{$&}++;$&/ge;
print Dumper(\%u);
或者对于不同的(或多或少“丑陋”)版本,将其全部计算在内:
use strict; use warnings;
use Data::Dumper;
my $seq1 = 'ATCGATGCAATTCCGGAAAAAATTTTCCCGGGGGGGAAACCCGGGAAATTT';
my %u;
$seq1 =~ s/./$u{$&}++;$&/ge;
print Dumper(\%u);
my$numberbase=map 1,$seq1=~/(\Q$base\E)/g;
这两种方式都很难看:)my$numberbase=map 1,$seq1=~/(\Q$base\E)/g;
这两种方式都很难看:)我想知道落选的选民是否有足够的勇气解释自己?如果知道我的答案有任何问题,我将不胜感激。我想知道落选的选民是否有足够的勇气解释自己?如果知道我的答案有任何问题,我将不胜感激。