Выполнение кода Perl 6 в Rmarkdown
Я хочу написать несколько руководств по Perl 6. Для этого я считаю, что Rmarkdown будет очень полезен.
Итак, я пытаюсь выполнить код Perl 6
в документе Rmarkdown.
Мой исполняемый файл 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.
![введите описание изображения здесь]()
Любая помощь, где мне не хватает?
Ответы
Ответ 1
Не моя область знаний, но с помощью справки в блоге Мне удалось получить ее для вывода.
Сначала зайдите на вкладку 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, прося его скомпилировать этот файл.
После сбора необходимого результата функция удаляет временный файл и дает нам вывод для рендеринга.
Ответ 2
У вас было две проблемы в вашем примере. Во-первых, я думаю, что вы все еще можете использовать существующий движок perl
(perl6
не является допустимым именем двигателя). Во-вторых, параметр engine.path
должен указывать на путь исполняемого файла вместо имени каталога, например
---
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'
))
```
Ответ 3
В командной строке на окнах это работает:
perl6 -e "say 'hello'"
но это не удается:
perl6 -e 'say "hello"'
Вам нужно использовать двойные кавычки для указания аргументов в командной строке.