加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl6 – 为什么我只从这个“for”语句中获得单个元素?

发布时间:2020-12-16 06:19:23 所属栏目:大数据 来源:网络整理
导读:我试图生成包含10个具有随机质量分数的随机序列的 FASTQ files.我最初使用以下代码,工作正常: my @seq = (rand_fa_seq() for ^10);my @qual = (rand_qual() for ^10);@seq.perl.say;@qual.perl.say;sub rand_fa_seq{ return join("",roll(20,"ACGT".comb));
我试图生成包含10个具有随机质量分数的随机序列的 FASTQ files.我最初使用以下代码,工作正常:

my @seq  = (rand_fa_seq() for ^10);
my @qual = (rand_qual()   for ^10);

@seq.perl.say;
@qual.perl.say;

sub rand_fa_seq
{
    return join("",roll(20,"ACGT".comb));

}

sub rand_qual
{
    return join("","EFGHIJ".comb))
}

但是,想要进一步简化它,我想也许我可以从右手语句中删除括号.当我这样做时,我只在@seq和@qual中获得了一个元素.

my @seq  = rand_fa_seq() for ^10;
my @qual = rand_qual()   for ^10;

@seq.perl.say;
@qual.perl.say;

sub rand_fa_seq
{
    return join("","EFGHIJ".comb))
}

这是一个错误还是它应该表现的方式?如果没有括号,这是一个标量上下文吗? Great List Refactor会改变这种行为吗?

我见过这种行为的Perl 6解释器的版本:

MoarVM:

perl6 version 2015.03-204-g8578022 built on MoarVM version 2015.03-60-g36d56f7

JVM:

perl6 version 2015.03-305-ga95107d built on JVM
java version “1.7.0_79”
OpenJDK Runtime Environment (rhel-2.5.5.1.el7_1-x86_64 u79-b14)
OpenJDK 64-Bit Server VM (build 24.79-b02,mixed mode)

解决方法

语句修饰符是Perl语法的标志之一(参见Perl 5的 perldoc),它们在过渡到版本6后幸存下来.

这意味着您的陈述等同于

my @seq;
for ^10 { @seq = rand_fa_seq() }

my @qual;
for ^10 { @qual = rand_qual() }

即你连续10次分配一个新值(只有最后一个幸存).

请注意,这也可以写得更加简洁

my @seq  = rand_fa_seq() xx 10;
my @qual = rand_qual() xx 10;

另请注意,默认情况下,sub中的最后一个语句提供返回值.

假设您可能需要长度不是20的序列,您可以参数化该值,最后得到以下结果:

sub rand-fa-seq($n = 20) { <A C G T>.roll($n).join }
sub rand-qual($n = 20)   { <E F G H I J>.roll($n).join }

my @seq  = rand-fa-seq() xx 10;
my @qual = rand-qual() xx 10;

我用过quote words而不是拆分字符串.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读