بسم الله الرحمن الرحيم


ربما تحب ان تكتب برامجك ببيرل و لكن تريد استخدام الواجهة الرسومية سوينج الخاصة بجافا ؟
ربما تحب ان تكتب الكلاسات بطريقة جافا و من ثم تستخدمهم كأنهم كائنات بيرل؟
ربما تحب ان تستخدم بعض المكتبات الموجودة في جافا ؟
ربما مشروعك يحتاج لقوة جافا و بيرل معا ؟
لهذه او لاسباب عديدة اخرى هناك امكانية دمج البرمجة بواسطة جافا داخل اكواد بيرل و ذلك باستخدام Inline::Java ..


اولا خطوات التنصيب :
عملية التنصيب ليست صعبة و لكن مختلفة عن طريقة تنصيب بقية الموجلات البيرلاوية !..
طبعا الخطوة الاولى ان يكون الجهاز يحتوي على اللغتين و من ثم تنصيب انلاين و بعدها تنزيل انلاين جافا ثم فك الضغط ثم اضافة عنوان جافا SDK لملف البناء … باختصار :


1- جافا و بيرل
2- cpan Inline
3- download Inline::Java
4- Extract
5-perl Makefile.PL J2SDK=/usr/lib/jvm/java-6-sun
6- make
7- make install


الان نحن جاهزون لاستخدام جافا في برامج بيرل مثال بسيط :
سنقوم بانشاء كائن جديد باستخدام بيرل و لكن سنكتب الكائن باستخدام جافا …


كود PHP:

   
#!/usr/bin/perl
    
use strict;
    use 
Inline Java => "DATA";
     
# create a triangle object
   
my $triangle RightAngledTriangle->new(3,4);
   print 
"The hypotenuse is " $triangle->get_hypotenuse "\n";
    
    
__DATA__
   __Java__
   import java
.lang.Math;
   public class 
RightAngledTriangle
   
{
     
double aj;
     
double op;
     
// the constructor (i.e. 'new')
     
public RightAngledTriangle(double ajdouble op)
     {
       
this.aj aj;
       
this.op op;
     }
     public 
double get_adjacent()
     {
       return 
aj;
     }
     public 
double get_opposite()
     {
       return 
op;
     }
     public 
double get_hypotenuse()
     {
       return 
Math.sqrt(
         
Math.pow(aj,2) +
         
Math.pow(op,2)
       );
     }
   } 
مثال اكثر تقدما استخدام سوينج في برامج بيرل :
لاحظ الاختلاف هنا في ان كلاس بود بوتن يرث كلاس InlineJavaPerlCaller
و اما البقية فهي ليست غريبة بتاتا على مبرمجي جافا و بيرل ..
كود PHP:
                                  #!/usr/bin/perl
  
use strict;
 

 

  use 
Inline Java => <<'END' ;
       
import java.util.* ;
       
import org.perl.inline.java.* ;
       
import javax.swing.* ;
       
import java.awt.event.* ;
 

       class 
Pod_Button extends InlineJavaPerlCaller
                        
implements ActionListener {
          
JFrame frame null ;
 

          public 
Pod_Button() throws InlineJavaException {
             
frame = new JFrame("Pod_Button") ;
             
frame.setSize(100,100) ;
             
JButton button = new JButton("Click Me!") ;
             
frame.getContentPane().add(button) ;
             
button.addActionListener(this) ;
             
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE) ;  
             
frame.show() ;
          }
 

          public 
void actionPerformed(ActionEvent e){
             try {
                
CallPerlSub("main::button_pressed", new Object [] {}) ;
             }
             catch (
InlineJavaPerlException pe){
                
// [email protected] is in pe.GetObject()
             
}
             catch (
InlineJavaException pe) {
                
pe.printStackTrace() ;
             }
          }
 

          public 
void close(){
             
frame.dispose() ;
             
frame.hide() ;
             
frame null ;
          }
 

          public 
void quit(){
             
System.exit(0) ;
          }
       }
 
END
 

    my $b 
= new Pod_Button() ;
    
$b->StartCallbackLoop() ;
    
$b->close() ;
 

    
# Maybe do some other stuff
 

    
exit() ;      # in client-server mode, optional
    
$b->quit() ;  # in JNI mode
 

    
sub button_pressed {
       print(
'click!' "\n") ; # prints click!
       
$b->StopCallbackLoop() ;
    } 
صفحة التوثيق الرئيسية :
http://search.cpan.org/~patl/Inline-Java-0.52/Java.pod