#!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) 好吧,所以我是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) 我想.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)
我正在玩可恢复的例外.在这个例子中,我尝试编号不编号的东西.我抓住了它并尝试给$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) 我尝试将范围(例如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) 运行此代码会占用大约4_000_000字节的内存吗?
my uint32 @array;
@array[1_000_000] = 1;
Run Code Online (Sandbox Code Playgroud) 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)
如何"..."在输出中没有得到不需要的换行符的情况下将其分成几行(我的意思是在代码中)?我\在换线之前考虑过,但它不起作用.
我有一个命令,期望从管道输入.例如,考虑一下着名的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)
但是,有没有一种方法,我可以做到这一点,但不运行bash和echo?
在Perl5中,我可以简单地做my $pid = open my $fh, '|-', 'cat';,然后print $fh $str.
我想删除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) loop {
my $word = prompt '> ' ;
say $word;
}
Run Code Online (Sandbox Code Playgroud)
什么是正确的方法,exit如果/当而不是打印一个单词我按Ctrl + D?
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