我想写一些关于Perl 6的教程。为此我相信Rmarkdown会有很大的帮助。
所以我试图在Rmarkdown文档中执行Perl 6
代码。
我的Perl 6可执行文件位于C:\rakudo\bin
。
所以我的.Rmd
文件包含完成此操作的示例代码如下:
---
title: "Example"
output: html_document
---
```{r, engine='perl6', engine.path='C:\\rakudo\\bin'}
my $s= "knitr is really good";
say $s;
```
然而,在Rstudio中编织上述文档显示以下内容没有Perl 6输出。
我失踪的任何帮助?
答案 0 :(得分:11)
不是我的专业领域,但是help of a blog我设法让它产生输出。
首先,查看RStudio的R Markdown
标签。它会向您显示一条警告,说明您的版本未呈现任何内容的原因:
Warning message:
In get_engine(options$engine) :
Unknown language engine 'perl6' (must be registered via knit_engines$set()).
因此,考虑到这一点,我们可以查看如何注册引擎并执行此操作:
```{r setup, echo=FALSE}
library(knitr)
eng_perl6 <- function(options) {
# create a temporary file
f <- basename(tempfile("perl6", '.', paste('.', "perl6", sep = '')))
on.exit(unlink(f)) # cleanup temp file on function exit
writeLines(options$code, f)
out <- ''
# if eval != FALSE compile/run the code, preserving output
if (options$eval) {
out <- system(sprintf('perl6 %s', paste(f, options$engine.opts)), intern=TRUE)
}
# spit back stuff to the user
engine_output(options, options$code, out)
}
knitr::knit_engines$set(perl6=eng_perl6)
```
```{r, engine='perl6'}
my $s= "knitr is really good";
say $s;
```
引擎注册了一个函数,该函数首先保存代码以运行到临时文件,然后执行Rakudo编译器,要求它编译该文件。
收集所需的输出后,该函数会删除临时文件并为我们提供渲染输出。
答案 1 :(得分:2)
你的例子中有两个问题。首先,我认为您仍然可以使用现有的perl
引擎(perl6
不是有效的引擎名称)。其次,engine.path
option应该指向可执行文件的路径而不是目录名称,例如
---
title: "Example"
output: html_document
---
```{perl, engine.path='C:\\rakudo\\bin\\perl6.exe'}
my $s= "knitr is really good";
say $s;
```
您还可以为perl
引擎全局设置引擎路径:
```{r, setup, include=FALSE}
knitr::opts_chunk$set(engine.path = list(
perl = 'C:\\rakudo\\bin\\perl6.exe'
))
```
答案 2 :(得分:1)
在Windows上的命令提示符下,这可以工作:
perl6 -e "say 'hello'"
但这失败了:
perl6 -e 'say "hello"'
您必须在命令提示符中使用双引号引用参数。