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

Я только что построил 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» в текущем (rakudo) каталоге. Затем программы можно запускать из каталога сборки с помощью такой команды, как:

   $ ./perl6 hello.pl

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

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

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

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

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

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

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

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

  1. Подчеркните, что запуск make install перед запуском скриптов вне сборки. Это требование в настоящее время скрыто в середине абзаца и может быть легко пропущено кем-то, просматривающим документацию (я).

  2. Явно укажите, что с --gen-parrot будет установлен perl6 в каталог parrot_install.


person daotoad    schedule 29.06.2010    source источник


Ответы (2)


Вы запускали make install в Ракудо?

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

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

person moritz    schedule 29.06.2010
comment
Спасибо за ответ. Я обновил свой вопрос, чтобы дать более широкий ответ. - person daotoad; 30.06.2010

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

http://github.com/rakudo/rakudo/commit0c2feeb3eb2/commit/261eb3eb2/commit/261eb5eb3

Надеюсь, вы найдете это яснее, чем раньше. Если вы все еще видите возможности для улучшения, рассмотрите возможность отправки патча по адресу [email protected].

person moritz    schedule 30.06.2010
comment
Могу я принять оба ваших ответа? Спасибо, вся ваша работа очень ценится. Вы и остальная часть команды perl6 проделываете потрясающую работу перед лицом порочной среды FUD и скептиков. Мое искреннее спасибо всем вам. - person daotoad; 01.07.2010