Как я могу использовать модули Perl 5 из Perl 6?
Можно ли использовать модули Perl 5 из CPAN из Rakudo Perl 6?
Например, как я могу использовать почтенный модуль Perl 5, CGI, который еще не был перенесен, в Perl 6.
Обновить:
А что это за прикольный код из какого-то раннего модуля Perl 6:
use CGI:from<perl5>;
Директива ":from", используемая для вызова некоторого уровня совместимости Perl 5. Не могу найти документацию по этому поводу.
2 ответа
Инлайн::Perl5
Получить его с http://modules.perl6.org/
panda install Inline::Perl5
В следующем примере показано, как импортировать и вызывать модуль Perl 5 Text::Unidecode
, "Unicode-транслитерация последней инстанции" из Perl 6.
Установите модуль, если у вас его нет
perl -MCPAN -e "install Text::Unidecode"
Теперь код
use Inline::Perl5;
use Text::Unidecode:from<Perl5>;
my $result = Text::Unidecode::unidecode('Solidarność');
say($result);
В качестве альтернативы, более гибкий способ - импортировать Inline::Perl5 самостоятельно, создать новый контекст и оценить вызов функции в этом контексте.
use Inline::Perl5;
my $p5 = Inline::Perl5.new;
$p5.use('Text::Unidecode');
my $result = $p5.call('Text::Unidecode::unidecode', 'Solidarność');
say($result);
В любом случае, это печатает
./perl6-m ~/perl/usefrom5.pl
Solidarnosc
Более подробный обзор доступен в Readme на Github.
Историческая перспектива
Ранее было два других проекта взаимодействия. Используйте v5 и проектную близость. V5 все еще работает, несколько. Близкость совершенно неактуальна сейчас.
Используйте v5
panda install v5
По состоянию на конец 2014 года v5 не компилируется под Jako Rakudo. Он компилируется под Rakudo на MoarVM (Он также не компилируется под Rakudo на ParrotVM).
blizkost
Несколько лет старались внедрить Perl 5 в ParotVM и использовать виртуальную машину для обеспечения взаимодействия. Поскольку это решение для конкретной виртуальной машины, оно было отменено в пользу Inline::Perl5.
Есть проект близость, который нацелен на использование кода perl5 от Rakudo/Parrot. Однако это AFAIK на довольно ранней стадии разработки и, вероятно, не пригодный для реального кода.