我刚刚建立了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文件鼓励我认为这是可能的:
Run Code Online (Sandbox Code Playgroud)$ cd rakudo $ perl Configure.pl --gen-parrot $ make这将在当前(rakudo)目录中创建"perl6"或"perl6.exe"可执行文件.然后可以使用如下命令从构建目录运行程序:
Run Code Online (Sandbox Code Playgroud)$ ./perl6 hello.pl
在重新阅读时,我发现了一个事实,即在构建目录之外运行脚本之前必须安装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 …
曾经有一个图表跟踪Perl6对Perl6测试套件的实现.我有兴趣观察它的进展(并且,退步).该图表发生了什么,它曾经在www.rakudo.de网站上托管
有没有其他简单的方法,局外人可以了解Rakudo在完善规范方面的立场?还缺少什么功能?
我有一个需要在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,但我不想依赖于正在安装的编译器.任何建议,将不胜感激.
是否有可能在Perl 6中重载常量?这是我正在看的Perl 5示例.
特别是我想获得一个使用的字面值的字符串,例如,如果代码是
my $x = .1e-003 ;
Run Code Online (Sandbox Code Playgroud)
我需要".1e-003"而不是0.0001.
使用NativeCall为Windows和Linux发布用于C库的Perl 6绑定的最佳策略是什么?
开发人员是否需要编译.dll和.so文件并将它们与perl6代码一起上传到github?或者perl6上有一个选项,比如perl5可以将C源文件与Perl 6代码捆绑在一起,C编译器将作为make和make install的一部分运行吗?
循环遍历列表(或数组)时,有没有办法知道循环中当前元素的索引?
当然,问题可以通过索引循环来解决:
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) 我在我的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) 我想使用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或Perl6完成Web开发?
像适用于Python的Django一样,我们有适用于Raku的任何框架吗?
如果您告诉我们哪些可用的库或任何教程,我将不胜感激。
是否有任何虚拟主机提供商托管Raku Web应用程序?
raku ×10
perl6 ×6
perl ×2
rakudo ×2
autoflush ×1
forms ×1
mysql ×1
nativecall ×1
portability ×1
rakudo-star ×1