由于这是在Perl 6文档中显示输出的标准方法,因此我使用whateverable机器人通过#perl6 IRC通道或#whateverable通道来评估表达式.产生的输出是这样的:
10:28:19 jmerelo | p6: say 333444777 ~~ /(3+)/ ?
10:28:19 evalable6 | jmerelo, rakudo-moar 5ce24929f: OUTPUT: «?333?? 0 => ?333??»
Run Code Online (Sandbox Code Playgroud)
(在WeeChat控制台程序中).从那个输出,我剪切并粘贴到文档,擦除我不感兴趣的部分.
我想知道是否有直接解析并保存输出一些简单的方法,无论是通过scriptint的IRSSI或weechat平台服务器为基础的(一些Whateverable机器人保存到间质瘤,例如),或基于客户端.
my ($a, $b) = 33,44 # $a will be 33 and $b 44
Run Code Online (Sandbox Code Playgroud)
但是,如果您尝试在变量声明后分配值,则将以静默方式删除值
my ($a = 44, $b = 33);
say $a, $b; #OUTPUT: «(Any)(Any)?»
Run Code Online (Sandbox Code Playgroud)
从那以后它就变得更加怪异了
my ($a = 44, $b);
Run Code Online (Sandbox Code Playgroud)
失败了:
===SORRY!=== Error while compiling /tmp/G7JgLMe1Wq
Cannot put required parameter $b after optional parameters
Run Code Online (Sandbox Code Playgroud)
和
my ($a, $b = 33);
Run Code Online (Sandbox Code Playgroud)
将与将它们中的任何一个分配在一起具有相同的结果.
这种行为让我感到困惑.它应该发出警告吗?第一个表达式是否也会产生与可选参数相同的错误?我们应该将其记录为陷阱吗?上述所有的?
您可以在Perl 6中创建符号链接:
my $symlink-path = ...;
$target.symlink: $symlink-path;
Run Code Online (Sandbox Code Playgroud)
只给出符号链接,你如何获得目标路径?
$symlink-path.IO.????
Run Code Online (Sandbox Code Playgroud)
我正在寻找作为目标的确切字符串,而不是对它的任何解释(例如.resolve).
我正在编写一个Telnet库,其中一个命令需要在根据RFC854发送的TCP数据包上设置URGENT标志:
通过TCP发送操作发送同步,其中设置了紧急标志,DM作为最后(或唯一)数据八位字节.
我怎样才能做到这一点?
我去
export PERL6LIB="/GitHub/perl6-Units/lib"
Run Code Online (Sandbox Code Playgroud)
然后
echo $PERL6LIB
/GitHub/perl6-Units/lib
Run Code Online (Sandbox Code Playgroud)
但是当我跑步的时候 perl6 t/01-basic.t
use v6;
use Test;
plan 3;
lives-ok {
use Units <m>;
ok @Units::UNITS.elems > 0;
ok (0m).defined;
}
done-testing;
Run Code Online (Sandbox Code Playgroud)
我仍然得到一个错误
===SORRY!===
Could not find Units at line 8 in:
/Users/--me--/.perl6
/usr/local/Cellar/rakudo-star/2018.01/share/perl6/site
/usr/local/Cellar/rakudo-star/2018.01/share/perl6/vendor
/usr/local/Cellar/rakudo-star/2018.01/share/perl6
CompUnit::Repository::AbsolutePath<140707489084448>
CompUnit::Repository::NQP<140707463117264>
CompUnit::Repository::Perl5<140707463117304>
Run Code Online (Sandbox Code Playgroud)
在Perl 5中,我会习惯于print "@INC";在抛出错误之前查看为lib搜索的路径.使用say flat $*REPO.repo-chain.map(*.loaded);它们在加载之前或之后抛出异常.
任何帮助将非常感激 - 或者可能暗示放入什么,~/.perl6因为我无法使符号链接工作.
我有自己的Rakudo副本,我很乐意给它一个试驾.在浏览互联网后,我发现了一些很酷的Perl 6内容的代码片段,但没有完整的脚本.任何提供实用Perl 6脚本的网站都将受到赞赏.
谢谢你们,Ehtyar.
在Scheme中,您可以使用以下内容迭代多个列表for-each:
> (for-each (lambda (a b) (display (+ a b)) (newline)) '(10 20 30) '(1 2 3))
11
22
33
>
Run Code Online (Sandbox Code Playgroud)
我知道在Perl中你可以使用for迭代单个列表.如Scheme示例中那样迭代多个列表的好方法是什么?
我对Perl 5或6的答案很感兴趣.
我如何在Perl 6中切断数组或数组引用?
在Perl 5中,我可以这样做:
my $d = [0 .. 9];
$#$d = 4;
Run Code Online (Sandbox Code Playgroud)
在Perl 6中,如果我尝试这个,我会收到错误:
my $d = [0 .. 9];
$d.end = 4; # Cannot modify an immutable Int
Run Code Online (Sandbox Code Playgroud)
这可行,但它看起来不如Perl 5方式漂亮,可能很昂贵:
$d.=splice(0, 5);
Run Code Online (Sandbox Code Playgroud) 如果连接中的所有部分匹配相同的子字符串而不是整个字符串,则Perl6正则表达式匹配连接&&返回True:
> my $a="123abc456def";
123abc456def
> so $a ~~ m/ 23 && ef /
False
Run Code Online (Sandbox Code Playgroud)
它是假的,因为"$"中的"23"匹配"$"中的"23"子字符串,但此子字符串与连接中的"ef"不匹配.这有点违反直觉,因为它更容易解释$ a ~~ m/23 && ef/as"$ a匹配23和$ a匹配ef"而不是"$ a有一个匹配23的子字符串,这个子字符串也匹配ef ".
如果我有n个正则表达式并且我想看看所有这些n个正则表达式是否匹配相同的整个字符串而不是匹配整个字符串的相同子字符串部分,那么编写perl6表达式的最佳方法是什么?
在这个例子中,我真的很想做
so (($a ~~ /23/) && ($a ~~ /ef/))
Run Code Online (Sandbox Code Playgroud)
如果正则表达式的数量很大,那么除了循环外,上面的内容更难写:
so (gather {for @myRegexes { take $a ~~ / $_ /; } }).all
Run Code Online (Sandbox Code Playgroud)
有更简单的方法吗?
通过替换,它更容易阅读为"$ a匹配23或$ a匹配ef"而不是"$ a匹配23或匹配ef"的部分:
> so $a ~~ m/ 23 || ef /
True
Run Code Online (Sandbox Code Playgroud)
谢谢 !
lisprog
使用通过Perl DBI访问的Oracle 10g,我有一个表,该表具有每秒更新几千万行的行,每秒更新几次,同时从另一个进程中更频繁地读取该行。
不久,更新频率将增加一个数量级(可能是两个)。有人建议,每执行N次更新,而不是每次更新,都将有助于提高性能。
我有几个问题:
编辑:
@codeslave:谢谢,顺便说一句,丢失未提交的更改不是问题,在确定一切正常之前,我不会删除用于更新的原始数据,顺便说一句,清洁女工确实拔下了服务器的电源,TWICE :-)
一些谷歌搜索显示它可能由于与回滚段相关的问题而有所帮助,但是我仍然不知道每隔几十个N的经验法则吗?几百个?一千?
@diciu:很好的信息,我一定会调查一下。
为什么Perl会泄漏?
$ perl -MDevel::LeakTrace::Fast -e 'our @a=(1);our @b=(1)'
leaked SV(0x0x84e053c) from -e line 1
$ perl -v
This is perl, v5.8.0 built for i386-linux-thread-multi
[...]
$ uname -a
Linux ant1 2.4.21-20.ELsmp #1 SMP Wed Aug 18 20:46:40 EDT 2004 i686 i686 i386 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
谢谢!
我最近将一个Perl应用程序表单移植到Postgres(我第一次使用Postgres),我被一个小问题困扰,我可以将其缩减为以下示例代码:
use strict;
use warnings;
use DBI;
my @db_params = qw (dbi:Pg:host=127.0.0.1;database=test test test);
my $dbh = DBI->connect(@db_params, {AutoCommit => 0 } ) or die ;
while (1) {
my $sth = $dbh->prepare_cached('SELECT localtimestamp ') or die;
$sth->execute() or die;
my $result = $sth->fetchall_arrayref();
print $result->[0][0] , "\n";
sleep(5);
}
Run Code Online (Sandbox Code Playgroud)
这输出:
2011-11-27 16:46:25.94291
2011-11-27 16:46:25.94291
2011-11-27 16:46:25.94291
Run Code Online (Sandbox Code Playgroud)
我总是得到相同的时间戳,除非我断开连接并重新连接到数据库.
我怎样才能确保从数据库中选择localtimestamp时,我得到的值与sql执行时的时间相对应?