标签: perl6

为什么我只从这个"for"语句中获得单个元素?

我正在尝试生成包含10个具有随机质量分数的随机序列的FASTQ文件.我最初使用以下代码,工作正常:

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("", roll(20,"EFGHIJ".comb))
}
Run Code Online (Sandbox Code Playgroud)

但是,想要进一步简化它,我想也许我可以从右手语句中删除括号.当我这样做,我只有在一个单一的元素@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("", roll(20,"ACGT".comb));

}

sub rand_qual
{
    return join("", roll(20,"EFGHIJ".comb))
}
Run Code Online (Sandbox Code Playgroud)

这是一个错误还是它应该表现的方式?如果没有括号,这是一个标量上下文吗?将在大名单重构改变这种行为?


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

MoarVM:

基于MoarVM版本2015.03-60-g36d56f7构建的perl6版本2015.03-204-g8578022

JVM:

perl6版本2015.03-305-ga95107d建立在JVM java版本"1.7.0_79"
OpenJDK运行时环境(rhel-2.5.5.1.el7_1-x86_64 u79-b14)
OpenJDK 64位服务器VM(版本24.79-b02,混合模式)

perl6

4
推荐指数
1
解决办法
74
查看次数

为什么我不能在"while"上称之为"gist"?(Perl 6)

我可以gistsay内置函数上调用该方法:

&say.gist
Run Code Online (Sandbox Code Playgroud)
sub say (| is raw) { #`(Sub|54790064) ... }
Run Code Online (Sandbox Code Playgroud)

为什么我不能打电话gistwhile

&while.gist
Run Code Online (Sandbox Code Playgroud)
===SORRY!=== Error while compiling <unknown file>
Undeclared routine:
    while used at line 1
Run Code Online (Sandbox Code Playgroud)

显然while不是"常规"而是say.但我认为Perl 6中的所有内置函数都是我们可以重新定义的函数.

perl6

4
推荐指数
1
解决办法
103
查看次数

为什么我不能在Perl 6的ClassHOW对象上调用methods方法?

我可以调用^methods一个对象并列出我可以调用的方法名称:

my $object = 'Camelia';
my @object_methods = $object.^methods;
@object_methods.map( { .gist } ).sort.join("\n").say;
Run Code Online (Sandbox Code Playgroud)

^methods返回我存储的列表@object_methods,然后我通过调用gist每个方法来改变方法thingys的列表,以获得该方法的人类感知形式.

但是,^in ^methods是隐含的.HOW,如对象文档末尾所示,这也应该有效:

my $object = 'Camelia';
my @object_methods = $object.HOW.methods;
Run Code Online (Sandbox Code Playgroud)

但是,我收到一个错误:

Too few positionals passed; expected 2 arguments but got 1
  in any methods at gen/moar/m-Metamodel.nqp line 490
  in block <unit> at...    
Run Code Online (Sandbox Code Playgroud)

并且,对于它的价值而言,这对于一种试图对这类事物是个人友好的语言来说是一个可怕的错误信息.文件m-Metamodel.nqp不是我的perl6安装的一部分.它甚至不是我可以google的东西,因为正如路径所暗示的那样,它是汇编产生的东西.而且,编译取决于版本.

metaclass perl6

4
推荐指数
1
解决办法
105
查看次数

如何将复数从命令行传递到子MAIN?

我有以下琐碎的脚本:

#!/usr/bin/env perl6

use v6.c;

sub MAIN($x)
{
    say "$x squared is { $x*$x }";
}
Run Code Online (Sandbox Code Playgroud)

当用实数调用它时,这种方法非常好,但我也希望将它传递给复数.当我按原样尝试时,会发生以下情况:

% ./square i
Cannot convert string to number: base-10 number must begin with valid digits or '.' in '?i' (indicated by ?)
  in sub MAIN at ./square line 7
  in block <unit> at ./square line 5

Actually thrown at:
  in sub MAIN at ./square line 7
  in block <unit> at ./square line 5
Run Code Online (Sandbox Code Playgroud)

当我将脚本更改为

#!/usr/bin/env perl6

use v6.c;

sub MAIN(Complex $x)
{
    say …
Run Code Online (Sandbox Code Playgroud)

perl6

4
推荐指数
2
解决办法
91
查看次数

perl6无法初始化状态变量.需要帮助

我想使用单行程序通过使用状态变量来打印文件的中间部分,以指示当前行是否在文件的所需部分内.但是我无法初始化状态变量.初始化是如此简单,我只是找不到问题所在.请帮忙.谢谢.

该文件名为testFile.txt,并包含以下行:

section 0; state 0; not needed
= start section 1 =
state 1; needed
= end section 1 =
section 2; state 2; not needed
Run Code Online (Sandbox Code Playgroud)

我的单行是

cat testFile.txt | perl6 -ne ' state $x = 0; say "$x--> "; if $_ ~~ m/ "start" / { $x=1; }; if $x == 1 { .say; }; if $_ ~~ m/ "end" / { $x = 2; }'
Run Code Online (Sandbox Code Playgroud)

并且输出显示$ x = 0没有进行初始化:

Use of uninitialized value $x of type Any …
Run Code Online (Sandbox Code Playgroud)

variables state perl6 assign

4
推荐指数
1
解决办法
93
查看次数

是否有一个perl6对应的powershells get-member来"分析"一个变量(-object)?

问题: 是否/ Powershells的Perl6对应物是什么get-member来"分析"变量的属性?

说明: 在Perl 6中,您可以获取变量的属性/属性,例如:

my $num=16.03;
say $num.numerator;   # output: 1603
say $num.denominator; # output: 100
say $num.nude;        # output: (1603 100)
say $num.WHAT;        # output: (Rat) 
Run Code Online (Sandbox Code Playgroud)

如何找出变量具有哪些属性/属性(分子等)和方法/函数(WHAT)?
在Powershell中,我将管道变量get-member,如: $num | get-member和将显示所有属性和功能.

perl6

4
推荐指数
1
解决办法
126
查看次数

如何将正则表达式作为参数传递给Perl 6中的子例程

可能我做的事情完全错了,但有没有办法修改和组合regexes使用子程序?下面的程序不会编译.

sub a(Regex $r1) {
  return rx/ <$r1> a /
}

my regex letter_b { b };

my $new = a(letter_b);
say $new;
Run Code Online (Sandbox Code Playgroud)

perl6

4
推荐指数
1
解决办法
173
查看次数

使用语法解析可能嵌套的支撑项

我开始编写BibTeX解析器.我想做的第一件事是解析一个支撑项目.例如,支撑项可以是作者字段或标题.字段中可能有嵌套的大括号.下面的代码并没有处理嵌套括号:

use v6;

my $str = q:to/END/;
  author={Belayneh, M. and Geiger, S. and Matth{\"{a}}i, S.K.}, 
  END

$str .= chomp;

grammar ExtractBraced {
    rule TOP {
        'author=' <braced-item> .*
    }
    rule braced-item      { '{' <-[}]>* '}' }
}

ExtractBraced.parse( $str ).say;
Run Code Online (Sandbox Code Playgroud)

输出:

?author={Belayneh, M. and Geiger, S. and Matth{\"{a}}i, S.K.},?
 braced-item => ?{Belayneh, M. and Geiger, S. and Matth{\"{a}?
Run Code Online (Sandbox Code Playgroud)

现在,为了使解析器接受嵌套大括号,我想保留当前解析的开括号数量的计数器,当遇到右大括号时,我们减少计数器.如果计数器达到零,我们假设我们已经解析了完整的项目.

为了遵循这个想法,我尝试拆分braced-item正则表达式,对每个char实现语法操作.(braced-item-char下面正则表达式的操作方法应该处理大括号计数器):

grammar ExtractBraced {
    rule TOP {
        'author=' <braced-item> .*
    }
    rule braced-item      { …
Run Code Online (Sandbox Code Playgroud)

grammar perl6 raku

4
推荐指数
1
解决办法
129
查看次数

如何在Perl 6中找到列表的正确最小/最大值

Perl6的新手,试图找出我在这里做错了什么.问题是一个简单的校验和,它取csv中每行的最大值和最小值的差值

它返回的最大值和最小值完全错误.对于csv中的第一行,它返回max为71,min为104,这是不正确的.

这是repo 的链接以供参考,以及指向相应问题的链接.

#!/usr/bin/env perl6

use Text::CSV;

sub checksum {
    my $sum = 0;
    my @data = csv(in => "input.csv");
    for @data -> @value {
        $sum += (max @value) - (min @value);
    }
    say $sum;
}

checksum
Run Code Online (Sandbox Code Playgroud)

perl6

4
推荐指数
1
解决办法
203
查看次数

变量在for循环中被覆盖

在for循环中,为另一个变量分配了一个值。已经分配了值的变量将从下一次迭代中分配值。最后,两个变量具有相同的值。该代码用于验证文件中的数据。当我打印值时,它将为第一次迭代打印正确的值,但是在下一次迭代中,将更改在第一次迭代中分配的值。当我在for循环中打印$ value3和$ value4的值时,它对$ value4显示空值,对$ value3显示一些值,但是在下一次迭代中,$ value3的值将被$ value4的值覆盖

我已经尝试过rakudo perl 6.c

my $fh= $!FileName.IO.open;
my $fileObject = FileValidation.new( file => $fh );

for (3,4).list {

  put "Iteration: ", $_;
  if ($_ == 4) {
    $value4 := $fileObject.FileValidationFunction(%.ValidationRules{4}<ValidationFunction>, %.ValidationRules{4}<Arguments>);
  }

  if ($_ == 3) {
    $value3 := $fileObject.FileValidationFunction(%.ValidationRules{3}<ValidationFunction>, %.ValidationRules{3}<Arguments>);
  }

  $fh.seek: SeekFromBeginning;

}
Run Code Online (Sandbox Code Playgroud)

perl6 raku

4
推荐指数
2
解决办法
127
查看次数

标签 统计

perl6 ×10

raku ×2

assign ×1

grammar ×1

metaclass ×1

state ×1

variables ×1