我有一个在模块文件(.pm)中编写的函数,并希望在Perl6文件(.pl6)中使用它.这两个文件位于同一个文件夹中:
C:\Users\Christian\Dropbox\ChristianPrivatefiler\Programmering\Perl6\perlCode
Run Code Online (Sandbox Code Playgroud)
我试图使用Perl6的答案:隐式和显式导入但我的代码返回了这个错误:
===SORRY!=== Could not find chrmodule1 at line 5 in:
C:\Users\Christian\Dropbox\ChristianPrivatefiler\Programmering\Perl6\modules
C:\Users\Christian\.perl6
C:\rakudo\share\perl6\site
C:\rakudo\share\perl6\vendor
C:\rakudo\share\perl6
CompUnit::Repository::AbsolutePath<84241584>
CompUnit::Repository::NQP<86530680>
CompUnit::Repository::Perl5<86530720> [Finished in 0.436s]
Run Code Online (Sandbox Code Playgroud)
这是.pm文件,chrmodule1.pm:
module chrmodule1 {
sub foo is export(:DEFAULT, :one) {
say 'in foo';
}
}
Run Code Online (Sandbox Code Playgroud)
这是.pl6文件,testOfCode3.pl6:
use v6;
use lib 'modules';
use chrmodule1;
foo();
Run Code Online (Sandbox Code Playgroud)
期望的结果是:
in foo [Finished in 0.317s]
Run Code Online (Sandbox Code Playgroud)我想创建一个凯撒密码,它可以从整个Unicode(私有使用区域除外)编码/解码unicode可打印字符(单和多码点字形集群,表情符号等).优选地,它将使用所有可打印字符的列表.
注意:即使我想创建一个caesar密码,它实际上不是关于加密.问题是关于调查unicode的属性.
我发现了这些问题:
但我没有得到我想要的答案.
注意:如果您给出编码答案,我最感兴趣的是使用python3或perl6的解决方案,因为它们是我的主要语言.
最近,我被赋予编写凯撒密码的任务,然后对英文文本进行编码和解码.
我通过使用字符串库的内置string.printable常量在python中解决了它.这是常量的打印输出:(我使用了visual studio代码)
文档说:'''ASCII字符串,被认为是可打印的.这是数字,ascii_letters,标点符号和空格的组合.''' https://docs.python.org/3.6/library/string.html#string-constants
以下是我对可打印字符的含义的理解:
当我将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认为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字符串. …