标签: perl6

perl6/rakudo:在循环变量上写的问题

#!perl6
use v6;

my $longest = 3;
my @list = <a b c d e f>;

for @list -> $element is rw {
    $element = sprintf "%*.*s", $longest, $longest, $element;
    $element.say;
}
Run Code Online (Sandbox Code Playgroud)

这有效.但在第二和第三,我得到一个错误信息.我怎么能让他们工作?

#!perl6
use v6;

my $longest = 3;
my @list = <a b c d e f>;

for @list <-> $element {
    $element = sprintf "%*.*s", $longest, $longest, $element;
    $element.say;
}

# ===SORRY!===
# Missing block at line 11, near ""
Run Code Online (Sandbox Code Playgroud)

.

#!perl6
use v6;

my $longest = …
Run Code Online (Sandbox Code Playgroud)

for-loop read-write perl6 rakudo-star raku

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

使用Posix分叉和管道的NativeCall代码不起作用

好吧,所以我是Perl和Perl 6的新手.我以为我会看到我是否可以分叉和管道工作,但到目前为止一直无法做到.这是我的Perl 6代码:

use NativeCall;

# http://www.perlmonks.org/?node_id=989766
our sub c_close(int32) returns int32 is native is symbol('close') { * }
sub pipe(CArray[int32]) returns int32 is native { ... }
our sub c_read(int32, Str is encoded('utf8'), size_t) returns ssize_t is native is symbol('read') { *}
our sub c_write(int32, Str is encoded('utf8'), size_t) returns ssize_t is native is symbol('write') { *}
our sub c_wait(int32 is rw) is native is symbol('wait') { * }
sub c_puts(Str) is native is symbol("puts") { * }
sub …
Run Code Online (Sandbox Code Playgroud)

c posix process perl6 nativecall

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

使用Perl 6语法解析结构化文本时如何跳过不相关的行?

我想.sql使用Perl 6 Grammar 来删除文件,我想知道我在解析时是否可以跳过一些不相关的行?

例如:我想在下面的文本中跳过块外的DROP行,/*!....!*/行,--行和空格CREATE TABLE.

也就是说,我想要专注于CREATE TABLE块:

    DROP TABLE IF EXISTS `abcd`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `abcd` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'app_id',
  `username` varchar(255) DEFAULT NULL COMMENT 'username',
  `url` varbinary(255) DEFAULT NULL COMMENT 'url',
  PRIMARY KEY (`id`),
  UNIQUE KEY `NewIndex1` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=954 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- …
Run Code Online (Sandbox Code Playgroud)

grammar skip perl6

3
推荐指数
2
解决办法
234
查看次数

这个Perl 6 CATCH块是否能够更改词法范围内的变量?

我正在玩可恢复的例外.在这个例子中,我尝试编号不编号的东西.我抓住了它并尝试给$value变量一个合适的值然后恢复执行:

try {
    my $m = 'Hello';
    my $value;
    $value = +$m;
    put "Outside value is ?{$value.^name}?";
    CATCH {
        when X::Str::Numeric {
            put "?$m? isn't a number!";
            put "Inside value is ?{$value.^name}?";
            $value = 0;
            put "Inside value is now ?$value.?";
            .resume;
            }
        default {
            put "Unhandled type ?{.^name}?";
            }
        }
    put "End of the block";
    }

put "Got to the end.";
Run Code Online (Sandbox Code Playgroud)

CATCH块可以看到它所处的词法范围,一个恢复从它停止的地方开始.我希望我能够更改$value并让其余的块使用该值,但在CATCH该值之外变为失败:

?Hello? isn't a number!
Inside value is ?Any?
Inside …
Run Code Online (Sandbox Code Playgroud)

exception perl6

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

为什么我的一些范围疯了?

我尝试将范围(例如1-9)的常见字符串描述解析为实际范围(例如1 .. 9),但是当包括两位数字时经常得到奇怪的结果.例如,1-10得到单个值1而不是十个值的列表,并11-20给出了四个值(11 10 21 20),其中一半甚至不在预期的数值范围内:

put get_range_for('1-9');
put get_range_for('1-10');
put get_range_for('11-20');

sub get_range_for ( $string ) {

    my ($start, $stop) = $string.split('-');

    my @values = ($start .. $stop).flat;

    return @values;
}
Run Code Online (Sandbox Code Playgroud)

这打印:

1 2 3 4 5 6 7 8 9
1
11 10 21 20
Run Code Online (Sandbox Code Playgroud)

而不是预期的:

1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 10
11 …
Run Code Online (Sandbox Code Playgroud)

perl6

3
推荐指数
2
解决办法
220
查看次数

多少内存使用带有一个高索引元素的数组?

运行此代码会占用大约4_000_000字节的内存吗?

my uint32 @array;
@array[1_000_000] = 1;
Run Code Online (Sandbox Code Playgroud)

memory arrays perl6

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

如何拆分我想要在Perl 6中打印的长字符串?

say "This is a very long line, and it seems it will not fit my screen, but alas, I don't know how to split it without getting an additional newline";
Run Code Online (Sandbox Code Playgroud)

如何"..."在输出中没有得到不需要的换行符的情况下将其分成几行(我的意思是在代码中)?我\在换线之前考虑过,但它不起作用.

perl6

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

如何管道字符串来处理'STDIN?

我有一个命令,期望从管道输入.例如,考虑一下着名的cat命令:

$ echo Hello | cat
Hello
Run Code Online (Sandbox Code Playgroud)

假设我在Perl 6程序中有一个字符串,我想管道输入命令:

use v6;

my $input = 'Hello'; # This is the string I want to pipe to the command.
my $proc  = run 'cat', :in($input);
Run Code Online (Sandbox Code Playgroud)

这不起作用(我没有输出).我可以通过调用bash和解决这个问题echo:

my $proc  = run 'bash', '-c', "echo $input | cat";
Run Code Online (Sandbox Code Playgroud)

但是,有没有一种方法,我可以做到这一点,但不运行bashecho

在Perl5中,我可以简单地做my $pid = open my $fh, '|-', 'cat';,然后print $fh $str.

pipe perl6 raku

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

我可以删除SetHash的元素并在Perl 6中使用它的值吗?

我想删除a的任何元素SetHash,以便返回其值:

my SetHash $a;
$a<m n k> = 1..*;
my $elem = $a.mymethod;
say $elem; # n
say $a; # SetHash(m k)
Run Code Online (Sandbox Code Playgroud)

我可以分两步完成,如下所示.有没有更好的办法?

my $elem = $a.pick;
$a{$elem}--;
Run Code Online (Sandbox Code Playgroud)

顺便说一下,是否有更多惯用的方法可以添加几个元素SetHash

以下是否更好?

my SetHash $a;
$a{$_}++ for <m n k>;
Run Code Online (Sandbox Code Playgroud)

要么

my SetHash $a;
$a<m n k> X= True;
Run Code Online (Sandbox Code Playgroud)

perl6 raku

3
推荐指数
2
解决办法
117
查看次数

如何在Ctrl + D输入上退出Perl 6脚本?

loop {
  my $word = prompt '> ' ;
  say $word;
}
Run Code Online (Sandbox Code Playgroud)

什么是正确的方法,exit如果/当而不是打印一个单词我按Ctrl + D?

perl6

3
推荐指数
2
解决办法
137
查看次数

标签 统计

perl6 ×10

raku ×3

arrays ×1

c ×1

exception ×1

for-loop ×1

grammar ×1

memory ×1

nativecall ×1

pipe ×1

posix ×1

process ×1

rakudo-star ×1

read-write ×1

skip ×1