2009-07-09 3 views
3

私は徐々にJava(クライアント要求ごとに)に変換する必要があるOO Perlコードの大きなモノリシックな本体を継承しました。私は両方の言語を知っていますが、Perlのスキルには錆びています。皆さんが痛みを和らげるために推奨できるツール(Eclipseプラグイン)はありますか?OO PerlをJavaに変換するにはどうすればよいですか?

答えて

1

PLEACは、最も優れたリソースの1つです。

8

OOコードはMooseを使用していますか?そうであれば、イントロスペクションを使用してクラス宣言を自動的に変換することができます。

徐々にPerlをJavaに変換するには、PerlプログラムにJavaコードをInline::Javaで含めることができます。

Perl on JVM projectがあります。PerlをJavaにコンパイルするために使用できますか?

1

inccode.comは、自動的にperlコードをjavaコードに変換します。それにもかかわらず、perl変数の変換はperlの動的な型付けのためにややこしい。 perlのスカラー変数には任意の型への参照を含めることができ、実際に参照される型はコードの実行時に認識されます。

Translatorは、Perlモジュールへの参照をカプセル化するために、すべての定義済みの型:ref(HASH)、ref(ARRAY)、BoxModuleをカプセル化するためにVarBoxクラスを使用します。

"hello world"を印刷する2つのモジュールを呼び出すshow perlスクリプトの例です。モジュール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はメソッドがモジュールへの参照を返す「新しい」という名前という前提がありますオブジェクトを宣言するため、特定の演算子を定義していないながら。モジュールへの参照を返すメソッドの名前が他に指定されている場合、注釈キャスト(module = "{class}")を使用してモジュールのタイプについてトランスレータに通知できます。

トランスレータが代入の型の適合を制御するため、識別された型の変数が伝播します。

 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); 
    } 

} 

翻訳されたコードでは、実行時ライブラリを実行する必要があります。

+2

inccode.comは利用できませんこれは他のどこかで見つけられますか? – Kai

+0

これに関するアップデートはありますか? –

+0

@Kaiニュースはありますか?そのサイトはもうなくなりました(今は別のものです) –

関連する問題