我正在尝试使用Apple文件系统(APFS)跟踪Perl 在macOS 上重命名的问题.我已经能够使用perls将其复制到至少5.12.3,但我的所有内容都是使用Apple LLVM版本9.1.0(clang-902.0.39.1)编译的.这些相同的perls在FAT或HFS +文件系统中没有这个问题.其他地方我没有注意到这个问题.
第一次运行它.我最终得到了一个Changes和一个Changes.bak.这正是我的预期.
再次运行它.您最终获得了更改和更改3文件.没有Changes.bak.这很奇怪.
再次运行它.我最终得到了一个Changes文件,Changes.bak和Changes 3.
再次运行它.我最终得到了一个Changes文件,Changes 3和Changes 4.再一次,没有Changes.bak.
如果我删除了这print条线,我无法理解这一点("医生,当我这样移动我的手臂时会疼,").
我重新命令文件句柄打开和关闭,但似乎没有解决任何问题.
我认为在文件系统级别发生了一些事情.所以我真的有两个问题:
这是一个错误,在什么级别?rename在我开始弄乱文件句柄之前,是否保证无法完成它需要做的任何事情?
我想读取旧文件并创建一个在中间插入一些数据的新文件.复制标题,插入新行,将所有旧行输出到新文件中.我可以写一个临时文件并稍后再移动,但我还做其他蠢事吗?
如果您可以重现此行为但不知道,请发表评论.也许我的系统还有其他奇怪之处.
my $changes = "Changes";
my $bak = $changes . ".bak";
rename $changes, $bak or die "Could not backup $changes. $!\n";
open my $in, '<', $bak or die "Could not read old $changes …Run Code Online (Sandbox Code Playgroud) 我正在尝试GetConsoleScreenBufferInfo(HANDLE, PCONSOLE_SCREEN_BUFFER_INFO)使用Perl 6和(当然)NativeCall从Windows API 使用该函数。
我想我已经CONSOLE_SCREEN_BUFFER_INFO正确设置了功能需要的结构,但是当我尝试转储其内容时,代码在调用后崩溃。
这是证明问题的最短的方法(不是很完全,但是很接近):
use NativeCall;
constant \HANDLE := Pointer[void];
constant \SHORT := int16;
constant \USHORT := uint16;
constant \WORD := uint16;
constant \DWORD := uint32;
constant \BOOL := int32;
constant \STD_OUTPUT_HANDLE := -11;
constant \STD_INPUT_HANDLE := -10;
class COORD is repr('CStruct') {
has SHORT $.X;
has SHORT $.Y;
}
class SMALL_RECT is repr("CStruct") {
has SHORT $.Left;
has SHORT $.Top;
has SHORT $.Right;
has SHORT $.Bottom;
};
class CONSOLE_SCREEN_BUFFER_INFO is repr("CStruct") { …Run Code Online (Sandbox Code Playgroud) 是否有一种直接的方法来使用Promise.in(或其他子/方法/类)来获得不确定的时间?换句话说,承诺永远不会解决。
目前,我正在检查$time何时遵守诺言,以查看是否请求了不确定的时间(以负数或0值表示),并防止react块退出。
这不是一个糟糕的解决方案,但是有没有更多惯用的方式来实现这一目标?
my $time=0;
react {
whenever Promise.in($time) {
#check if time is 0
done if $time > 0;
}
whenever signal(SIGINT) {
done;
}
#whenever Supply...{
#}
}
Run Code Online (Sandbox Code Playgroud) 该问题已移至“代码审查”中的该职位。请在代码审查中回答问题。谢谢!
受此颜色渐变生成器的启发,这是perl6中的渐变生成器。我想知道代码是否可以简化或改进。它将十六进制颜色转换为base10,计算渐变颜色,然后将颜色转换为base16。
my $initial_color = '#FF0000';
my $final_color = '#00FF00';
my $gradient = 10;
my @initial = ($initial_color ~~ /\#(..)(..)(..)/).list.map: { .Str.parse-base(16) };
my @final = ($final_color ~~ /\#(..)(..)(..)/).list.map: { .Str.parse-base(16) };
my @range = @final Z- @initial;
my @increment = @range.map: { $_ / $gradient };
my @color;
@color.push: @initial;
for (1..$gradient) -> $i {
@color.push: @(@color[$i-1]) Z+ @increment;
}
for (0..$gradient) -> $i {
@color[$i] = '#' ~ ( @(@color[$i]).map: { .base(16,0).fmt('%02s') } ).join; …Run Code Online (Sandbox Code Playgroud) 我怎么知道使用时我是否真的需要返回l值FALLBACK?
我正在使用,return-rw但我只想return在可能的地方使用。我想跟踪我是否实际上已修改过%!attrs或仅在FALLBACK调用时读取了该值。
或者(替代方案B)我可以附加回调或类似的东西%!attrs来监视更改吗?
class Foo {
has %.attrs;
submethod BUILD { %!attrs{'bar'} = 'bar' }
# multi method FALLBACK(Str:D $name, *@rest) {
# say 'read-only';
# return %!attrs{$name} if %!attrs«$name»:exists;
# }
multi method FALLBACK(Str:D $name, *@rest) {
say 'read-write';
return-rw %!attrs{$name} if %!attrs«$name»:exists;
}
}
my $foo = Foo.new;
say $foo.bar;
$foo.bar = 'baz';
say $foo.bar;
Run Code Online (Sandbox Code Playgroud) 如何为哈希创建代理对象?我似乎找不到传递哈希键的方法:
#sub attr() is rw {
sub attr($name) is rw {
my %hash;
Proxy.new(
FETCH => method (Str $name) { %hash«$name» },
STORE => method (Str $name, $value) { %hash«$name» = $value }
);
}
my $attr := attr();
$attr.bar = 'baz';
say $attr.bar;
Run Code Online (Sandbox Code Playgroud) 我正在寻找一些有关如何在Raku / perl6中按第n个文件读取文本文件的建议。
在生物信息学研究中,有时我们需要以一种不太直接的方式来解析文本文件。例如Fastq文件,一次以4行为一组存储数据。甚至更多,这些Fastq文件成对出现。因此,如果我们需要解析此类文件,则可能需要执行以下操作:从第一个Fastq文件读取4行,从第二个Fastq文件读取4行,然后从第一个Fastq文件读取接下来的4行,然后读取第二个fastq文件中的下4行,......
关于解决此问题的最佳方法,我是否可以提出一些建议?Raku的“ IO.lines”方法似乎能够一次处理每一行。但不确定如何处理每第n行
一个示例fastq文件对:https : //github.com/wtwt5237/perl6-for-bioinformatics/tree/master/Come%20on%2C%20sister/fastq 我们之前对“ IO.lines”进行的尝试:https:// github.com/wtwt5237/perl6-for-bioinformatics/blob/master/Come%20on%2C%20sister/script/benchmark2.p6
我因此从字符串中捕获一个数字:
my $n1;
if $string1 ~~ /(<[0..4]>)$/ {
$n1 = $0;
} else {
put "$string1 failed regex.";
die;
}
Run Code Online (Sandbox Code Playgroud)
这是很多行,但是我可以在一行中复制和编辑字符串,因此:
my $string2 = $group2.subst(/<[0..4]>$/, '');
Run Code Online (Sandbox Code Playgroud)
我仍在学习raku / perl6,我浏览了https://docs.perl6.org/type/Str,看起来Raku不能做到这一点……但我不确定。
有没有一种方法可以像上面的第一个代码示例一样在一行中捕获子字符串?
我在脚本中反复执行此过程,这确实会缩短脚本
据我(和文档)所知,slurpies 只能与数组或哈希参数一起使用。但是,我最近打错了语法并输入了看起来像是标量 slurpy 的语法。令我惊讶的是,这并没有导致语法错误。经过一些实验,我确定以下都是允许的:
sub f(*$a) {}
sub g(**$a) {}
sub h(+$a) {}
Run Code Online (Sandbox Code Playgroud)
但是我看不到这个语法做了什么(如果有的话)。发生什么了?这是一个记录不足的功能吗?导致无效语法的错误不会引发错误?完全是别的什么?
在添加更多数据之前,我一直在处理大量数据。结果以字符串的形式写入文件,但是我收到了这个错误信息,在我的代码梳理了2天后,我无法找到编程错误;在添加新数据之前,我的代码一直运行良好。
Died with the exception:
Attempt to divide by zero when coercing Rational to Str
in sub analyzeData at /home/xyz/numberCrunch.p6 line 2720
in block at /home/xyz/numberCrunch.p6 line 3363
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
第 2720 行是输出到文件的行: $fh.say("$result");
所以,Rational 似乎是一个延迟评估。有没有办法强制将 Rational 立即转换为小数?或者通过让 Rational 尽早检测到 0 分母使 Rational 变得更聪明?