标签: perl6

如何在对模块进行单元测试时模拟导入的子例程

考虑一个模块,它导出一个连接到Internet并返回结果的子例程:

unit module A;

sub download is export {
     "result from internet"  # Not the actual implementation, obviously.
}
Run Code Online (Sandbox Code Playgroud)

另一个导入并调用该子例程的模块:

use A;  # imports &download into this lexical scope
unit module B;

sub do-something is export {
     download().uc ~ "!!"   # Does something which involves calling &download
}
Run Code Online (Sandbox Code Playgroud)

现在我想为模块编写单元测试B.
但我不希望测试真正连接到互联网; 我希望他们使用download由我的测试脚本控制的子程序的模拟版本:

use Test;
plan 2;

use B;

my $mock-result;
my &mock-download = -> { $mock-result }

# ...Here goes magic code that installs &mock-download
# as …
Run Code Online (Sandbox Code Playgroud)

unit-testing mocking perl6

2
推荐指数
1
解决办法
342
查看次数

在Perl 6中使用循环组合正则表达式

在这里,我regexRegex数组元素手动创建.

my Regex @reg =
  / foo /,
  / bar /,
  / baz /,
  / pun /
  ;

my $r0 = @reg[0];
my $r1 = @reg[1];

my Regex $r = / 0 $r0 | 1 $r1 /;

"0foo_1barz" ~~ m:g/<$r>/;
say $/;  # (?0foo? ?1bar?)
Run Code Online (Sandbox Code Playgroud)

怎么做for @reg {...}

perl6

2
推荐指数
1
解决办法
110
查看次数

Perl 6:基于终端的程序的自动测试

我如何自动与命令行程序进行交互,这些命令行程序使用Perl 6公开文本终端接口以进行测试?

testing terminal interactive perl6

2
推荐指数
1
解决办法
147
查看次数

Perl 6会很快包含在Linux的所有发行版中吗?

Perl 6很快就会包括在内并将取代所有Linux发行版中的Perl 5吗?

perl perl6

1
推荐指数
2
解决办法
294
查看次数

尝试使用Perl6.org上演示的线程

我保存了

my $thread = Thread.start({ for  1 .. 10  -> $v { say $v }});
Run Code Online (Sandbox Code Playgroud)

https://docs.perl6.org/language/concurrency#Threads到一个文件并运行perl6 file.pl但得到错误

Undeclared name: Thread used ...
Run Code Online (Sandbox Code Playgroud)

任何想法如何解决问题?(该文档未提及使用任何包.)

[编辑:即使今天(2016年5月4日)"apt-get install rakudo"制作:

阅读包列表...完成
构建依赖关系树
读取状态信息...完成
rakudo已经是最新版本.

所以也许apt-get不是获取Perl最新版本的方法(至少在Mint上).最全面的答案是raiph的评论.]

multithreading perl6

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

一连串承诺的成语是什么?

我如何一个接一个地执行两个承诺?

例如,在JavaScript中我可以

var promise1 = new Promise();
var promise2 = new Promise();

// await returns a result2 from promise2
await promise1.then(() => promise2);
Run Code Online (Sandbox Code Playgroud)

我如何在Perl 6中做同样的事情?

my $promise1 = Promise.new();
my $promise2 = Promise.new();

// Here I get only Promise2 object, not its result
await promise1.then({ $promise2 });
Run Code Online (Sandbox Code Playgroud)

我必须等待这样的$ promise2吗?

await promise1.then({ await $promise2 });
Run Code Online (Sandbox Code Playgroud)

perl6 promise

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

将BibTeX作者字段拆分为多个部分

我试图使用以下语法解析BibTeX作者字段:

use v6;
use Grammar::Tracer;

# Extract BibTeX author parts from string. The parts are separated
# by a comma and optional space around the comma
grammar Author {
    token TOP {
        <all-text> 
    }
    token all-text {
        [<author-part> [[\s* ',' \s*] || [\s* $]]]+ 
    }
    token author-part { 
        [<-[\s,]> || [\s* <!before ','>]]+
    }
}

my $str = "Rockhold, Mark L";
my $result = Author.parse( $str );
say $result;
Run Code Online (Sandbox Code Playgroud)

输出:

TOP
|  all-text
|  |  author-part
|  |  * …
Run Code Online (Sandbox Code Playgroud)

perl6 raku

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

在Perl 6 REPL中使用chdir的奇怪(内部?)默认构造函数错误消息

我遇到以下错误:

&*chdir('/home/account')   
Run Code Online (Sandbox Code Playgroud)

无法将工作目录更改为"/ home/account":"IO :: Path"的默认构造函数仅接受命名参数

我需要更改什么才能克服此错误?

(我使用的是perl6版本2013.12 Ubuntu 14.04)

io runtime-error internals perl6 chdir

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

具有所有Unicode可打印字符的Caesar密码

我想创建一个凯撒密码,它可以从整个Unicode(私有使用区域除外)编码/解码unicode可打印字符(单和多码点字形集群,表情符号等).优选地,它将使用所有可打印字符的列表.

注意:即使我想创建一个caesar密码,它实际上不是关于加密.问题是关于调查unicode的属性.

我发现了这些问题:

Unicode可打印字符的范围是多少?

密码与所有unicode字符

但我没有得到我想要的答案.

注意:如果您给出编码答案,我最感兴趣的是使用python3或perl6的解决方案,因为它们是我的主要语言.

最近,我被赋予编写凯撒密码的任务,然后对英文文本进行编码和解码.

我通过使用字符串库的内置string.printable常量在python中解决了它.这是常量的打印输出:(我使用了visual studio代码)

[参见下面的python代码和结果]

文档说:'''ASCII字符串,被认为是可打印的.这是数字,ascii_letters,标点符号和空格的组合.''' https://docs.python.org/3.6/library/string.html#string-constants

我想知道你如何创建一个凯撒密码,它可以编码/解码你可以从unicode代码点制作的所有可打印字符(只要你拥有所有必需的字体来查看那些应该在屏幕上可见的字体).

以下是我对可打印字符的含义的理解:

当我将python字符串常量保持在上面,并使用键盘上的左侧或方向箭头键遍历它时,我只需要100个笔画即可到达末尾(与字符数相同).看起来在作为可打印字符和可以通过箭头键的一个笔划进行遍历之间存在一对一的对应关系.

现在考虑这个字符串:

"ijक्षि"

基于pythons string.printable常量,这个字符串在我看来由以下7个可打印字符组成:(您可以在以下位置查找各个代码点:https://unicode-table.com/en/)

1(家庭)2(拉丁小Ligature Ij)3(cariage return)4(Devanagari kshi)5(空间)6(零宽度不间断空间)7(黑桃王牌)

代码点:128104 8205 128105 8205 128103 8205 128102(参考:https://emojipedia.org/family-man-woman-girl-boy/ )

(Latin Small Ligature Ij)ijcodepoint:307

(回车)代码点:13

(Devanagari kshi)क्षिcodepoints:2325 2381 2359 2367
(参见本页:http://unicode.org/reports/tr29/ )(代码点似乎是十六进制而不是数字)

(空格)码点:32

(零宽度不间断空间)代码点:65279(AKA U + FEFF BYTE ORDER MARK(BOM))(https://en.wikipedia.org/wiki/Byte_order_mark)

(黑桃牌扑克牌)代号:127137

当我将这个字符串粘贴到记事本中,并尝试用箭头键遍历它时,我最终使用了10个键击而不是7个键,因为家族表情符号需要4个键击(可能是因为记事本无法处理零宽度连接符,代码点:8205,当然记事本不能显示家庭标志符号).另一方面,当我将字符串发布到谷歌搜索时,我可以用7个笔画遍历整个字符串.

然后我尝试在Perl6中创建字符串以查看Perl6的字形意识对字符串的影响:

(我使用Atom编辑器)

[参见下面的perl6代码和结果]

perl6认为Devanagari kshi角色(4个代码点)实际上是2个字形,每个字形有2个代码点.即使它可以表示为两个字符,如上面的列表所示,我认为这是一个错误.Perl6应该是字形意识,甚至我的Windows记事本(和谷歌搜索)认为它是一个字素/字符.

基于2个字符串,可打印字符的实际定义似乎是这样的:'它是任何unicode代码点的组合,可以在理想的环境下通过键盘上的一个左或右箭头键来遍历.

"在理想环境下"意味着您正在使用的环境可以说就像谷歌搜索一样:也就是说,它可以识别例如表情符号(4人家族)或字形集群(梵文字符)作为一个可打印的字符.

3个问题:

1:以上是unicode中可打印字符意味着什么的公平定义?

2:无论你是否接受这个定义,你知道任何覆盖当前使用的unicode平面和可能的字形集群的可打印字符列表,而不仅仅是python字符串库所拥有的100个ASCII字符(如果我有这样的列表)我想我可以很容易地创建一个密码)?

3:鉴于这样的列表不存在,并且您接受该定义,您将如何创建这样一个列表,我可以创建一个凯撒密码,可以在给定以下4个条件的情况下加密任何/所有可打印字符?

注意:这4个条件正是我想象的适当的凯撒密码所需要的.

条件a

要加密的字符串将是一个有效的utf8字符串,包含标准的unicode代码点(没有未分配的或私有的区域代码点)

条件b

加密字符串也必须是由标准unicode代码点组成的有效utf8字符串. …

python unicode perl6 caesar-cipher

0
推荐指数
1
解决办法
573
查看次数