Почему я получаю ошибки «деление на ноль», когда пытаюсь запустить скрипт с помощью Rakudo?

StackOverflow https://stackoverflow.com/questions/3144043

  •  01-10-2019
  •  | 
  •  

Вопрос

Я только что создал Rakudo и Parrot, чтобы поиграть с ними и начать изучать Perl 6.Я скачал книгу о Perl 6 и с радостью напечатал первую демонстрационную программу (пример теннисного турнира).

При попытке запустить программу получаю ошибку:

Divide by zero
current instr.: '' pc -1 ((unknown file):-1)

У меня есть мой perl6 двоичный файл в каталоге сборки.Я добавил каталог сценариев в каталог сборки rakudo:

  rakudo
  |- perl6
  \- scripts
     |- perlbook_02.01
     \- scores

Если я попытаюсь запустить даже простой сценарий hello world из моего каталога сценариев, я получу ту же ошибку:

#!/home/daotoad/rakudo/perl6

use v6;
say "Hello nurse!";

Однако, если я запустил его из rakudo каталог, все работает.

Похоже, мне нужно установить некоторые переменные среды, но я не понимаю, что это такое и какие значения им присвоить.

Есть предположения?

Обновлять:

Я бы предпочел не устанавливать rakudo на этом этапе, а просто запускать все из каталога сборки.Это позволит мне свести к минимуму изменения в моей системе при тестировании различных сборок Perl6 (Rakudo * выйдет очень скоро).

Файл README натолкнул меня на мысль, что это возможно:

   $ cd rakudo
   $ perl Configure.pl --gen-parrot
   $ make

Это создаст исполняемый файл «perl6» или «perl6.exe» в текущем (ракудо) каталоге.Программы можно затем запускать из каталога сборки, используя такую ​​команду:

   $ ./perl6 hello.pl

Перечитав, я нашел упоминание о том, что перед запуском скриптов вне каталога сборки необходимо устанавливать rakudo:

После постройки Ракудо make install Target установит Rakudo и его библиотеки в установку попугая, которая использовалась для его создания.Пока этот шаг не будет выполнен, исполняемый файл «perl6» создан make Выше может быть надежно заканчиваться от корня каталога сборки Ракудо.После make install выполняется, установленного исполняемого файла может быть запущен из любого каталога (если установка попугая, которая использовалась для его создания, остается нетронутой).

Похоже, мне нужно установить rakudo, чтобы играть с Perl 6.

Следующий вопрос, куда устанавливать ракудо?README говорит об установке Parrot, используемой для сборки.

Я использовал --gen-parrot опция в моей сборке, которая выглядит так, как будто она устанавливается в rakudo/parrot-install.Итак, ракудо будет установлено в мой rakudo\parrot-install?

Чтение Makefile подтверждает этот вывод.я побежал make install, и он установился в parrot_install.

Эта часть процесса сборки/установки непонятна новичку в Perl6.Я посмотрю, смогу ли я выпустить патч для документации, чтобы прояснить ситуацию.

С верхней части моей головы:

  1. Сделайте упор на бег make install перед запуском сценариев вне сборки.В настоящее время это требование спрятано в середине абзаца, и его может легко пропустить тот, кто просматривает документацию (я).

  2. Прямо укажите, что с --gen-parrot установит perl6 в parrot_install каталог.

Это было полезно?

Решение

Ты бежал? make install в Ракудо?

Это необходимо сделать, чтобы иметь возможность использовать Rakudo вне каталога сборки (именно поэтому и README, и http://rakudo.org/how-to-get-rakudo сказать тебе сделать это.

Не волнуйтесь, место установки по умолчанию локальное (parrot_install/bin/perl внутри вашего каталога rakudo).

Другие советы

В ответ на ваше обновление я обновил README:

http://github.com/rakudo/rakudo/commit/261eb2ae08fee75a0a0e3935ef64c516e8bc2b98

Надеюсь, вам это покажется яснее, чем раньше.Если вы все еще видите возможности для улучшения, рассмотрите возможность отправки исправления на адрес rakudobug@perl.org.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top