让我们做一个非常简单的事情,
# Foo.pm
package Foo {
my $baz = bar();
sub bar { 42 }; ## Overwrite this
print $baz; ## Before this is executed
}
Run Code Online (Sandbox Code Playgroud)
无论如何,我可以从test.pl运行代码中更改$baz设置并导致Foo.pm在屏幕上打印其他内容吗?
# maybe something here.
use Foo;
# maybe something here
Run Code Online (Sandbox Code Playgroud)
在编译器阶段是否可以强制上述内容打印7?
我试图用Perl6做一些OOP并且在角色方面遇到一些麻烦.我试图以类似于Java接口的方式使用它们,在那里我只有方法签名,必须由任何扮演角色的类实现.我使用带有类型参数的stubbed方法并返回.
我注意到类型签名没有被强制执行,只有方法的名称.
示例脚本:
#!/usr/bin/env perl6
use v6;
role MyRole {
method intAdder( Int $a, Int $b --> Int ) { ... }
}
# this does the role and the method signature matches
class MyClass1 does MyRole {
method intAdder( Int $a, Int $b --> Int ) { return $a+$b }
}
# this does the role and the method signature does NOT match
# why is this allowed?
class MyClass2 does MyRole {
method intAdder( Str $a --> Str …Run Code Online (Sandbox Code Playgroud) 我正在尝试安装Perl6:
perl Configure.pl --backend=jvm --gen-nqp
Run Code Online (Sandbox Code Playgroud)
再传统make&make install
后者 - 其中大部分都会出现此错误:
== Installing modules for JVM
cd modules/zef && sh -c "PATH='/illumina/runs/Scripts/perl6/rakudo-star-2018.10/install/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/illumina/runs/RNASeq/stringtie-1.3.3b.Linux_x86_64:/illumina/runs/RNASeq/subread-1.6.0-Linux-x86_64/bin:/illumina/runs/RNASeq/STAR-master/bin/Linux_x86_64:/illumina/runs/RNASeq/hisat2-2.1.0:/home/703404669/Scripts/vcftools-vcftools-ea875e2/src/cpp:/illumina/runs/RNASeq/FastQC:/home/703404669/.local/bin:/home/703404669/bin' /illumina/runs/Scripts/perl6/rakudo-star-2018.10/install/bin/perl6-j -Ilib bin/zef install ."
===SORRY!===
Error while compiling op nativecallinvoke, no registered operation handler
make: *** [modules-install-j] Error 1
Run Code Online (Sandbox Code Playgroud)
我仍然是Perl6的新手,我不知道如何处理这个错误,它不会出现在搜索引擎上.
如何通过此错误安装perl6?
raku -version 这是基于实施 Perl 6.d 的 MoarVM 2020.01.1 版构建的 Rakudo 2020.01 版。
目前看起来我无法启动任何运行时间低于 130 毫秒(主要是启动时间)的 Raku Perl6 程序。
- Raku 总是在程序启动时重新解析完整的源代码吗?
- Raku 缓存任何字节码吗?
- 所以即使是在线运行也总是需要 >= 130 毫秒?
time raku --stagestats hello_world.pl
Stage start : 0.000
Stage parse : 0.133
Stage syntaxcheck: 0.000
Stage ast : 0.000
Stage optimize : 0.002
Stage mast : 0.006
Stage mbc : 0.001
Stage moar : 0.000
hello world
hello world
TEST
hello world
real 0m0,183s
user 0m0,231s
sys 0m0,016s
Run Code Online (Sandbox Code Playgroud) 我想使用 MojoliciousMojo::Log工具来登录我的 Mojolicious Web 应用程序。但是,我不确定使用它的正确/正确方法。
文档显示它直接从脚本中使用,但没有说明它是否是线程安全的或在控制器之间共享是否安全,或者每个控制器是否应该实例化自己的Mojo::Log对象(在这种情况下,所有控制器都可以安全地使用它吗?指向同一个日志文件?)。
使用此记录器的正确方法是什么?
如何强制Mojolicious(hypnotoad)应用使用TLS v1.2?
mojo version 输出:
CORE
Perl (v5.16.3, linux)
Mojolicious (8.0, Supervillain)
OPTIONAL
Cpanel::JSON::XS 4.04+ (n/a)
EV 4.0+ (4.22)
IO::Socket::Socks 0.64+ (n/a)
IO::Socket::SSL 2.009+ (2.060)
Net::DNS::Native 0.15+ (n/a)
Role::Tiny 2.000001+ (2.000005)
Run Code Online (Sandbox Code Playgroud)
hypnotoad conf:
{
hypnotoad => {
listen => ['https://myserver.domain.com:xxxx?cert=/path/to/cert/file.cer&key=/path/to/key/file.key'],
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我开始催眠的方法:
hypnotoad -f script/apps
Run Code Online (Sandbox Code Playgroud)
我已经IO::Socket::SSL按照某处的建议更新了模块。没用
非常感谢任何指导。
HypnoToad 发送页面后如何让我的代码执行某些操作?(注:我正在回答我自己的问题。我发布此内容是因为 StackOverflow 向我指出了上一个问题,该问题并未直接解决我的问题,尽管它确实包含了我需要的线索。)
示例代码:
use Mojolicious::Lite;
get "/index" => sub {
my $c = shift;
$c->render("renderThis");
# Do something after rendering
};
app->start('daemon', '-l', 'http://*:8080');
__DATA__
@@ renderThis.html.ep
% layout "template" ;
<h1>Hello World</h1>
@@ layouts/template.html.ep
<!DOCTYPE html>
<html><head></head><body>
%= content
</body></html>
Run Code Online (Sandbox Code Playgroud)
render 似乎缓冲其 http 输出并在代码块完成后发送它。我希望在页面发送后执行一些操作。可以通过将以下内容替换“Do some”注释来观察缓冲。
sleep 15;
say "Wow, that was a long time!";
Run Code Online (Sandbox Code Playgroud)
我用的是win7,所以纯unix的解决方案不起作用。
我发现具有高可用性级别的perldoc.pl是最新的5.30.0版本。
Perl.org链接到perldoc.perl.org,该版本停止在5.26.1版。但是另一方面,它链接到Download(版本5.28.2)到Strawberry Perl(实际上是5.30.0版本),我感到很困惑。
我已经知道Perl 6是完全不同的语言。在5.26。*之后可能还会有其他语言障碍吗?
由于我很少使用它,所以程序更新是重新输入Perl的起点。这就是为什么我对在安装之前研究delta文档 感兴趣的原因,而且很难找到该delta。
如何在 mojo 响应中访问 JSON?
$txn = $ua->post( $url, $headers, json => {json} )
Run Code Online (Sandbox Code Playgroud)
从 txn 获取 JSON 响应的方法是什么?
我有以下代码:
$codelist = 00;
$OK = '0';
$OK = () = $codelist =~ /$OK/g;
print "$OK\n"; #answer is 2.
Run Code Online (Sandbox Code Playgroud)
表达式$OK = () = $codelist =~ /$OK/g是如何计算的?优先顺序是什么?
我很少写Perl,也不知道如何表达问题。我使用Perl作为浏览文件的“过滤器”。
echo "this is a test" | perl -pe 's/(this).*(test)?/\1 \2/'
Run Code Online (Sandbox Code Playgroud)
仅返回
this
Run Code Online (Sandbox Code Playgroud)
我在寻找
this test
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 -e 来检查文件是否存在,$name 是用户指定的任何输入,"_file_"是固定的,而 * 可能是任何可能的。目前它无法检测到该文件。
if (-e $name."_file_*.txt)
{
do something;
}
Run Code Online (Sandbox Code Playgroud) perl ×9
mojolicious ×4
perl6 ×2
compilation ×1
http ×1
hypnotoad ×1
json ×1
moarvm ×1
performance ×1
perldoc ×1
raku ×1
rakudo ×1
regex ×1
ssl ×1
tls1.2 ×1