当前位置: 首页 > 知识库问答 >
问题:

Perl6 REPL用法

邢修明
2023-03-14

在将您放入REPL之前,是否可以让(Rakudo)Perl6执行一些代码?就像python对“python-i”所做的那样。

例如,我想加载一些模块,可能读取一个侧文件并从该侧文件构建一些数据结构,然后放入REPL并让用户在数据结构上做他们需要做的事情,使用REPL作为用户交互界面。

这与从文件加载定义的Start REPL相似但不同,尽管这个问题的答案可能满足那个问题。基本情况是,在任何程序的执行结束时,解释器将用户留在REPL处,而不是退出。除了为交互式程序提供一个漂亮的、内置的、基于Perl6的用户界面外,它还提供了一个很好的工具,可以用来html" target="_blank">调试否则会出现错误的代码。

编辑:

选择Zoffix的解决方案作为正确的解决方案(到目前为止),因为它是唯一满足所述所有要求的解决方案。希望编译器或语言规范中添加此功能。

共有2个答案

裴欣荣
2023-03-14

我想提供Zoffix在IRC上给出的答案。它满足了基本要求,但远远不够漂亮,它使用的NQP没有用户支持,也不能保证将来使用NQP API(“NQP::*”调用),并且可以在没有警告的情况下更改。

replify 「
  say 'Hello to your custom REPL! Type `say $a` to print the secret variable';
  my $a = "The value is {rand}";
」;

sub replify (Str:D \pre-code = '') {
    use nqp;
    my %adverbs; # command line args like --MFoo
    my \r := REPL.new: nqp::getcomp('perl6'), %adverbs;
    my \enc := %adverbs<encoding>:v.Str;
    enc && enc ne 'fixed_8' && $*IN.set-encoding: enc;

    my $*CTXSAVE := r;
    my $*MAIN_CTX;
    pre-code and r.repl-eval: pre-code, $, :outer_ctx(nqp::getattr(r, REPL, '$!save_ctx')),
      |%adverbs;
    $*MAIN_CTX and nqp::bindattr(r, REPL, '$!save_ctx', $*MAIN_CTX);

    r.repl-loop: :interactive, |%adverbs;
}
花俊雄
2023-03-14

您可以使用开关加载模块。

$ perl6 -MJSON::Tiny

To exit type 'exit' or '^D'
> to-json Array.new: 1,2,3.Str
[ 1, 2, "3" ]
> 

如果要运行其他代码,当前必须先将其放入模块中。

$ mkdir lib
$ echo 'our $bar = 42' > lib/foo.pm6
$ perl6 -Ilib -Mfoo

To exit type 'exit' or '^D'
> $bar
42
> 
 类似资料:
  • 问题内容: 编辑:“ 我从’erickson’那里收到了一个非常相关的答案,但是存在一个附带问题(向上投射?),这个问题在我的原始示例中并未明确涵盖,并且无法用他的答案解决。我将该示例扩展到涵盖了另一个问题,我已在本文结尾处将其包括在内。感谢您的帮助。 我目前面临Java泛型的问题,该问题与所谓的“好奇地重复的通用模式”有关。在阅读了Jon Skeet对这个问题“ java枚举定义”的答案之后,我

  • 本文向大家介绍php中引用&的用法分析【变量引用,函数引用,对象引用】,包括了php中引用&的用法分析【变量引用,函数引用,对象引用】的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了php中引用&的用法。分享给大家供大家参考,具体如下: php的引用(就是在变量或者函数、对象等前面加上&符号) //最重要就是 删除引用的变量 ,只是引用的变量访问不了,但是内容并没有销毁 在PHP 中引用的

  • 本文向大家介绍使用 iisext.vbs 启用应用程序的方法,包括了使用 iisext.vbs 启用应用程序的方法的使用技巧和注意事项,需要的朋友参考一下 应用到: Windows Server 2003, Windows Server 2003 R2, Windows Server 2003 with SP1 可以使用命令行脚本 iisext.vbs(存储在 systemroot\system3

  • 有人能告诉我用两种不同的方法调用同一个函数的区别,以及编译器在这两种情况下到底做了什么;比如:

  • 我的问题是关于JMeter和BeanShell后处理程序。 我已经用Eclipse开发了一个Java项目,并将该项目导出到一个JAR中。我已经把这个jar放在JMeter的/lib/ext文件夹中。 我不明白为什么当我直接调用jar时它会工作,为什么当我用JMeter做同样的事情时它不会工作。 谢谢你的帮助。

  • 本文向大家介绍蓝牙用法和应用,包括了蓝牙用法和应用的使用技巧和注意事项,需要的朋友参考一下 蓝牙使用 蓝牙的使用大致可分为三个领域: 数据和语音的接入点-蓝牙通过无线连接便携式和固定网络设备来提供实时语音和数据传输。 电缆更换-蓝牙替代了有线网络的大量电线和电缆。即使设备不在范围内,连接也可以立即建立并保持。设备的范围通常为10m。但是,可以通过使用放大器扩大范围。 Ad hoc网络-网络设备即席

  • Usage: mocha [debug] [options] [files] Options: -V, --version output the version number -A, --async-only force all tests to take a callback (async)

  • 当你面对需要用多段代码来处理一个事件的情况时,典型的解决方案有:用函数指针进行回调,或者直接对 产生事件的子系统与处理事件的子系统之间的依赖性进行编码。这种设计常常会导致循环的依赖性。通过使用 Boost.Signals, 你将获得灵活性和解耦。要开始使用这个库,首先要包含头文件 "boost/signals.hpp".[2] <small class="calibre23"></small><s