Как я могу конвертировать OO Perl в Java?

Я унаследовал большое монолитное тело кода OO Perl, который должен постепенно преобразовываться в Java (по запросу клиента). Я знаю оба языка, но не знаю, как работать с Perl. Есть ли какие-либо инструменты (плагины Eclipse?), Которые вы, ребята, можете порекомендовать, чтобы облегчить боль?

Ответы на вопрос(3)

inccode.com позволяет автоматически конвертировать код Perl в код Java. Тем не менее, преобразование переменных perl немного сложнее из-за динамической типизации perl. Скалярная переменная в perl может содержать ссылку на любой тип, а реальный ссылочный тип известен при выполнении кода.

Translator использует класс VarBox для инкапсуляции всех предопределенных типов: ref (HASH), ref (ARRAY) и BoxModule для инкапсуляции ссылки на модули Perl.

В примере показан скрипт perl, который вызывает два модуля для печати & # x201C; hello world & # x201D ;. Модуль LibConsole создается в сценарии, а доступ к модулю LibPrinter осуществляется путем вызова метода в LibConsole.

    #!/usr/bin/perl
use strict;

use test::LibPrinter;
use test::LibConsole;

hello_on_console( "hello world");
hello_on_printer( "hello world");

    sub get_console
{
    my $console = test::LibConsole->new();  
    return $console;        
}

sub get_printer
{
#@cast(module="test::LibPrinter")   
    my $printer = get_console()->get_printer(); 
    return $printer;        
}    

sub hello_on_console
{
    my ($hello) = @_;

    my $console = get_console();
    $console->output ($hello);  
}

sub hello_on_printer
{
    my ($hello) = @_;
    my $printer= get_printer();
    $printer->output ($hello);  
}

Теперь переводчик должен типы обоих модулей, и в то время как perl не определяет конкретные операторы для объявления объекта, существует предположение, что метод с именем & # x201C; new & # x201D; вернуть ссылку на модуль. Когда метод, который возвращает ссылку на модуль, называется иначе, приведение аннотации (module = & # x201D; {class} & # x201D;) может использоваться для информирования переводчика о типе модуля.

Идентифицированный тип переменной будет распространен, потому что переводчик контролирует соответствие типов в назначениях.

     public class hello extends CRoutineProcess implements IInProcess
 {
   VarBox call ()
   {
      hello_on_console("hello world");
      return hello_on_printer("hello world");

   }
   BoxModule<LibConsole> get_console ()
   {
      BoxModule<LibConsole> varConsole = new BoxModule<LibConsole>(LibConsole.apply());
      return varConsole;
   }
   BoxModule<test.LibPrinter> get_printer ()
   {  
      BoxModule<LibPrinter> varPrinter = new BoxModule<LibPrinter>(get_console().getModule().get_printer());
      return varPrinter;
   }
   VarBox hello_on_console (VarBox varHello)
   {
      BoxModule<LibConsole> varConsole = new BoxModule<LibConsole>(get_console());
      return varConsole.getModule().output(varHello);
   }
   VarBox hello_on_printer (VarBox varHello)
   { 
      BoxModule<LibPrinter> varPrinter = new BoxModule<LibPrinter>(get_printer());
      return varPrinter.getModule().output(varHello);
   }

 }

Переведенный код требует выполнения библиотеки времени выполнения.

 27 нояб. 2017 г., 16:59
@ Кай какие-нибудь новости? этого сайта больше нет (сейчас это что-то другое ..)
 12 сент. 2014 г., 11:04
inccode.com больше не доступен. Это можно найти где-то еще?
 26 янв. 2017 г., 18:43
какое-нибудь обновление по этому поводу?

Я бы сказалPLEAC это один из величайших ресурсов.

ОО код использует Moose? Если да, то можно автоматически конвертировать объявления классов с помощью самоанализа.

Чтобы постепенно преобразовать Perl в Java, вы можете включить код Java в программу Perl с помощьюИнлайн :: Java.

ЕстьPerl на проекте JVMМожет быть, он может быть использован для компиляции Perl в Java?

Ваш ответ на вопрос