标签: raku

当我尝试使用Rakudo运行脚本时,为什么会出现"除以零"错误?

我刚刚建立了Rakudo和Parrot,以便我可以玩它并开始学习Perl 6.我下载了Perl 6书并愉快地输入了第一个演示程序(网球锦标赛示例).

当我尝试运行该程序时,出现错误:

Divide by zero
current instr.: '' pc -1 ((unknown file):-1)
Run Code Online (Sandbox Code Playgroud)

perl6在构建目录中有我的二进制文件.我在rakudo构建目录下添加了一个脚本目录:

  rakudo
  |- perl6
  \- scripts
     |- perlbook_02.01
     \- scores
Run Code Online (Sandbox Code Playgroud)

如果我尝试从我的脚本目录运行一个简单的hello world脚本,我会得到同样的错误:

#!/home/daotoad/rakudo/perl6

use v6;
say "Hello nurse!";
Run Code Online (Sandbox Code Playgroud)

但是,如果我从rakudo它运行的目录运行它.

听起来我需要设置一些环境变量,但我不知道给它们的是什么和什么值.

有什么想法吗?

更新:

我宁愿不安装rakudo,我宁愿只是从build目录运行.这将允许我在我尝试不同的Perl6版本时(Rakudo*即将推出)将我对系统的更改保持在最低限度.

README文件鼓励我认为这是可能的:

   $ cd rakudo
   $ perl Configure.pl --gen-parrot
   $ make
Run Code Online (Sandbox Code Playgroud)

这将在当前(rakudo)目录中创建"perl6"或"perl6.exe"可执行文件.然后可以使用如下命令从构建目录运行程序:

   $ ./perl6 hello.pl
Run Code Online (Sandbox Code Playgroud)

在重新阅读时,我发现了一个事实,即在构建目录之外运行脚本之前必须安装rakudo:

一旦构建,Rakudo的make install目标将把Rakudo及其库安装到用于创建它的Parrot安装中.在执行此步骤之前,make上面创建的"perl6"可执行文件只能从Rakudo的构建目录的根目录中可靠地运行.make install执行完后,可以从任何目录运行已安装的可执行文件(只要用于创建它的Parrot安装保持不变).

所以看起来我需要安装rakudo来玩Perl 6.

接下来的问题是,安装rakudo的地方?README说用于构建的Parrot安装.

--gen-parrot在我的构建中使用了该选项,它看起来像是安装的rakudo/parrot-install.所以rakudo会安装到我的rakudo\parrot-install

阅读Makefile,支持这个结论.我跑了make install,它确实安装了parrot_install …

rakudo perl6 raku

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

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

Rakudo测试套件进展?

曾经有一个图表跟踪Perl6对Perl6测试套件的实现.我有兴趣观察它的进展(并且,退步).该图表发生了什么,它曾经在www.rakudo.de网站上托管

有没有其他简单的方法,局外人可以了解Rakudo在完善规范方面的立场?还缺少什么功能?

rakudo perl6 raku

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

使Perl脚本在Perl 5和6中都能正常工作

我有一个需要在Perl 5和Perl 6环境中运行的Perl脚本.如果使用Perl6我需要在Perl5上使用"perl6 :: Form"我需要使用"Format".

此代码适用于两个版本或perl而不会出现错误:

BEGIN {
    if( $] ge 6){
        require Perl6::Form;
        Perl6::Form::->import();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何在Perl5上运行时"分离"Perl6代码.

if( $] ge 6){ # Perl6
    print form
    ...
    ...
} else { # perl5
    format STDOUT =
    ...
    ...
} 
Run Code Online (Sandbox Code Playgroud)

当我在Perl5上出错时,这不能干净地工作:

Unquoted string "form" may clash with future reserved word at /usr/bin/script.pl line 628.
Name "main::form" used only once: possible typo at /usr/bin/script.pl line 641.
Run Code Online (Sandbox Code Playgroud)

我简要地看了一下Text::CPP,但我不想依赖于正在安装的编译器.任何建议,将不胜感激.

forms perl portability perl6 raku

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

在Perl 6中重载常量

是否有可能在Perl 6中重载常量?是我正在看的Perl 5示例.

特别是我想获得一个使用的字面值的字符串,例如,如果代码是

my $x = .1e-003 ;
Run Code Online (Sandbox Code Playgroud)

我需要".1e-003"而不是0.0001.

perl operator-overloading perl6 raku

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

Perl 6 NativeCall和C源文件

使用NativeCall为Windows和Linux发布用于C库的Perl 6绑定的最佳策略是什么?

开发人员是否需要编译.dll和.so文件并将它们与perl6代码一起上传到github?或者perl6上有一个选项,比如perl5可以将C源文件与Perl 6代码捆绑在一起,C编译器将作为make和make install的一部分运行吗?

nativecall raku

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

Perl 6在循环遍历列表时显示索引

循环遍历列表(或数组)时,有没有办法知道循环中当前元素的索引?

当然,问题可以通过索引循环来解决:

my @aa = 8 .. 12;
say "$_\t@aa[$_]" for 0 ..^ @aa.elems;
Run Code Online (Sandbox Code Playgroud)

但也许类似下面的内容是可能的(我用.CURRENT_INDEX我正在寻找的方法标记)?

my @aa = 8 .. 12;
say $_.CURRENT_INDEX\t$_ for @aa;
Run Code Online (Sandbox Code Playgroud)

perl6 raku

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

Perl 6 DBIish坏了

我在我的macOS v10.13(High Sierra)上安装了DBIish:

zef install DBIish
Run Code Online (Sandbox Code Playgroud)

我的测试脚本是:

use v6;
use DBIish;

my $host='xxx.xx.xxx.xxx';
my $password='abc@123';


my $dbh = DBIish.connect('mysql', :host, :port(3306),
        :database<ald_xinen>, :user<aldwx>, :$password);

my $sth = $dbh.do(q:to/STATEMENT/);
    DROP TABLE IF EXISTS nom
    STATEMENT

$sth = $dbh.do(q:to/STATEMENT/);
    CREATE TABLE nom (
        name        varchar(4),
        description varchar(30),
        quantity    int,
        price       numeric(5,2)
    )
    STATEMENT

$sth.finish;
$dbh.dispose;
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,它得到了这个:

This type cannot unbox to a native string: P6opaque, Bool
  in block  at /Users/ohmycloud/.rakudobrew/moar-nom/install/share/perl6/site/sources/F2D45FC1BC0A15B4C8511E3A864F1FC1C3F269BB (DBIish) line 41
  in any  at /Users/ohmycloud/.rakudobrew/moar-nom/install/share/perl6/site/precomp/D3F1031B6C577F31F20F165D75D09B8D4CFEDE2F.1507566035.94084/F2/F2D45FC1BC0A15B4C8511E3A864F1FC1C3F269BB line 1
  in method CALL-ME …
Run Code Online (Sandbox Code Playgroud)

mysql raku

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

不能在`qqww`或`qqww:to`结构中使用冒号对

我想使用a生成一个json行Class,我会覆盖该gist方法,以便它将打印出我想要的内容:

my $ak = '7111ac873c9dcd5fc335ded47630d050';
my $st = '1523451601875';
my $ifo = 'true';
my $uu = "15778787898988090";

class Stay {
  has $.ak  is rw = '7111ac873c9dcd5fc335ded47630d050';
  has $.uu  is rw;
  has $.ifo is rw;
  has $.st  is rw;

  method gist() {
    #return qqww/{"ev":"app","ak":"$!ak","uu":"$!uu","ifo":"$!ifo","st":"$!st"}/;

    return qqww:to?EOF?;
    {"ev":"app","ak":"$!ak","uu":"$!uu","ifo":"$!ifo","st":"$!st"}
    EOF
  }
}

say Stay.new(uu => $uu, ifo => $ifo, st => $st); 
Run Code Online (Sandbox Code Playgroud)

但失败了:

===SORRY!=== Error while compiling /Users/ohmycloud/Desktop/stay.pl6
Confused
at /Users/ohmycloud/Desktop/stay.pl6:18
------>     {"ev":?"app","ak":"$!ak","uu":"$!uu","ifo":"$!i
    expecting any of:
        colon pair
Run Code Online (Sandbox Code Playgroud)

我想要的是: …

raku

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

使用Raku进行Web开发

我想知道是否可以使用Raku或Perl6完成Web开发?

像适用于Python的Django一样,我们有适用于Raku的任何框架吗?

如果您告诉我们哪些可用的库或任何教程,我将不胜感激。

是否有任何虚拟主机提供商托管Raku Web应用程序?

raku

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