|
¡¡
|
¡¡
|
|
µÚÊ®ÈýÕ PerlµÄÃæÏò¶ÔÏó±à³Ì
by chinacode
Ò»¡¢Ä£¿é¼ò½é
¶þ¡¢PerlÖеÄÀà
Èý¡¢´´½¨Àà
ËÄ¡¢¹¹Ô캯Êý
ʵÀý±äÁ¿
Îå¡¢·½·¨
Áù¡¢·½·¨µÄÊä³ö
Æß¡¢·½·¨µÄµ÷ÓÃ
°Ë¡¢ÖØÔØ
¾Å¡¢Îö¹¹º¯Êý
Ê®¡¢¼Ì³Ð
ʮһ¡¢·½·¨µÄÖØÔØ
Ê®¶þ¡¢PerlÀàºÍ¶ÔÏóµÄһЩעÊÍ
±¾Õ½éÉÜÈçºÎʹÓÃPerlµÄÃæÏò¶ÔÏó±à³Ì(OOP)ÌØÐÔ¼°ÈçºÎ¹¹½¨¶ÔÏ󣬻¹°üÀ¨¼Ì³Ð¡¢·½·¨ÖØÔغÍÊý¾Ý·â×°µÈÄÚÈÝ¡£
Ò»¡¢Ä£¿é¼ò½é
Ä£¿é(module)¾ÍÊÇPerl°ü(pachage)¡£PerlÖеĶÔÏó»ùÓÚ¶Ô°üÖÐÊý¾ÝÏîµÄÒýÓᣣ¨ÒýÓüûµÚxÕÂÒýÓã©¡£ Ïê¼ûhttp://www.metronet.comµÄperlmodºÍperlobj¡£
ÔÚÓÃÆäËüÓïÑÔ½øÐÐÃæÏò¶ÔÏó±à³Ìʱ£¬ÏÈÉùÃ÷Ò»¸öÀàÈ»ºó´´½¨¸ÃÀàµÄ¶ÔÏó£¨ÊµÀý£©£¬Ìض¨ÀàËùÓжÔÏóµÄÐÐΪ·½Ê½ÊÇÏàͬµÄ£¬ÓÉÀà·½·¨È·¶¨£¬¿ÉÒÔͨ¹ý¶¨ÒåÐÂÀà»ò´ÓÏÖ´æÀà¼Ì³ÐÀ´´´½¨Àà¡£ÒÑÊìÏ¤ÃæÏò¶ÔÏó±à³ÌµÄÈË¿ÉÒÔÔÚ´ËÓöµ½Ðí¶àÊìϤµÄÊõÓï¡£PerlÒ»Ö±ÊÇÒ»¸öÃæÏò¶ÔÏóµÄÓïÑÔ£¬ÔÚPerl5ÖУ¬Óï·¨ÂÔÓб䶯£¬¸ü¹æ·¶»¯Á˶ÔÏóµÄʹÓá£
ÏÂÃæÈý¸ö¶¨Òå¶ÔÀí½â¶ÔÏó¡¢ÀàºÍ·½·¨ÔÚPerlÖÐÈçºÎ¹¤×÷ÖÁ¹ØÖØÒª¡£
.ÀàÊÇÒ»¸öPerl°ü£¬ÆäÖк¬Ìṩ¶ÔÏó·½·¨µÄÀà¡£
.·½·¨ÊÇÒ»¸öPerl×Ó³ÌÐò£¬ÀàÃûÊÇÆäµÚÒ»¸ö²ÎÊý¡£
.¶ÔÏóÊǶÔÀàÖÐÊý¾ÝÏîµÄÒýÓá£
¶þ¡¢PerlÖеÄÀà
ÔÙÇ¿µ÷һϣ¬Ò»¸öPerlÀàÊǽöÊÇÒ»¸ö°ü¶øÒÑ¡£µ±Äã¿´µ½PerlÎĵµÖÐÌáµ½¡°Àࡱʱ£¬°ÑËü¿´×÷¡°°ü¡±¾ÍÐÐÁË¡£Perl5µÄÓï·¨¿ÉÒÔ´´½¨À࣬Èç¹ûÄãÒÑÊìϤC++£¬ÄÇô´ó²¿·ÖÓï·¨ÄãÒÑ¾ÕÆÎÕÁË¡£ÓëPerl4²»Í¬µÄ¸ÅÄîÊÇÓÃ˫ðºÅ(::)À´±êʶ»ù±¾ÀàºÍ¼Ì³ÐÀࣨ×ÓÀࣩ¡£
ÃæÏò¶ÔÏóµÄÒ»¸öÖØÒªÌØÐÔÊǼ̳С£PerlÖеļ̳ÐÌØÐÔÓëÆäËüÃæÏò¶ÔÏóÓïÑÔ²»ÍêȫһÑù£¬ËüÖ»¼Ì³Ð·½·¨£¬Äã±ØÐëÓÃ×Ô¼ºµÄ»úÖÆÀ´ÊµÏÖÊý¾ÝµÄ¼Ì³Ð¡£
ÒòΪÿ¸öÀàÊÇÒ»¸ö°ü£¬ËùÒÔËüÓÐ×Ô¼ºµÄÃû×ֿռ估×Ô¼ºµÄ·ûºÅÃû¹ØÁªÊý×飨Ïê¼ûµÚxÕ¹ØÁªÊý×飩£¬Ã¿¸öÀàÒò¶ø¿ÉÒÔʹÓÃ×Ô¼ºµÄ¶ÀÁ¢·ûºÅÃû¼¯¡£Óë°üµÄÒýÓýáºÏ£¬¿ÉÒÔÓõ¥ÒýºÅ(')²Ù×÷·ûÀ´¶¨Î»ÀàÖеıäÁ¿£¬ÀàÖгÉÔ±µÄ¶¨Î»ÐÎʽÈ磺$class'$member¡£ÔÚPerl5ÖУ¬¿ÉÓÃ˫ðºÅÌæ´úµ¥ÒýºÅÀ´»ñµÃÒýÓã¬È磺$class'$memberÓë$class::$memberÏàͬ¡£
Èý¡¢´´½¨Àà¡£
±¾½Ú½éÉÜ´´½¨Ò»¸öÐÂÀàµÄ±ØÒª²½Öè¡£ÏÂÃæÊ¹ÓõÄÀý×ÓÊÇ´´½¨Ò»¸ö³ÆÎªCocoaµÄ¼òµ¥µÄÀ࣬Æä¹¦ÄÜÊÇÊä³öÒ»¸ö¼òµ¥µÄJavaÓ¦ÓõÄÔ´ÂëµÄ±ØÒª²¿·Ö¡£·ÅÐÄ£¬Õâ¸öÀý×Ó²»ÐèÒªÄãÓÐJavaµÄ֪ʶ£¬µ«Ò²²»»áʹÄã³ÉΪJavaר¼Ò£¬ÆäÄ¿µÄÊǽ²Êö´´½¨ÀàµÄ¸ÅÄî¡£
Ê×ÏÈ£¬´´½¨Ò»¸öÃûΪCocoa.pmµÄ°üÎļþ(À©Õ¹ÃûpmÊǰüµÄȱʡÀ©Õ¹Ãû£¬ÒâΪPerl Module)¡£Ò»¸öÄ£¿é¾ÍÊÇÒ»¸ö°ü£¬Ò»¸ö°ü¾ÍÊÇÒ»¸öÀà¡£ÔÚ×öÆäËüÊÂ֮ǰ£¬ÏȼÓÈë¡°1;¡±ÕâÑùÒ»ÐУ¬µ±ÄãÔö¼ÓÆäËüÐÐʱ£¬¼Çס±£Áô¡°1;¡±Îª×îºóÒ»ÐС£ÕâÊÇPerl°üµÄ±ØÐèÌõ¼þ£¬·ñÔò¸Ã°ü¾Í²»»á±»Perl´¦Àí¡£ÏÂÃæÊǸÃÎļþµÄ»ù±¾½á¹¹¡£
package Cocoa;
#
# Put "require" statements in for all required,imported packages
#
#
# Just add code here
#
1; # terminate the package with the required 1;
½ÓÏÂÀ´£¬ÎÒÃÇÍù°üÀïÌí¼Ó·½·¨Ê¹Ö®³ÉΪһ¸öÀà¡£µÚÒ»¸öÐèÌí¼ÓµÄ·½·¨ÊÇnew()£¬ËüÊÇ´´½¨¶ÔÏóʱ±ØÐë±»µ÷Óõģ¬new()·½·¨ÊǶÔÏóµÄ¹¹Ô캯Êý¡£
ËÄ¡¢¹¹Ô캯Êý
¹¹Ô캯ÊýÊÇÀàµÄ×Ó³ÌÐò£¬Ëü·µ»ØÓëÀàÃûÏà¹ØµÄÒ»¸öÒýÓ᣽«ÀàÃûÓëÒýÓÃÏà½áºÏ³ÆÎª¡°×£¸£¡±Ò»¸ö¶ÔÏó£¬ÒòΪ½¨Á¢¸Ã½áºÏµÄº¯ÊýÃûΪbless()£¬ÆäÓ﷨Ϊ£º
bless YeReference [,classname]
YeReferenceÊǶԱ»¡°×£¸£¡±µÄ¶ÔÏóµÄÒýÓã¬classnameÊÇ¿ÉÑ¡Ïָ¶¨¶ÔÏó»ñÈ¡·½·¨µÄ°üÃû£¬ÆäȱʡֵΪµ±Ç°°üÃû¡£
´´½¨Ò»¸ö¹¹½¨º¯ÊýµÄ·½·¨Îª·µ»ØÒÑÓë¸ÃÀà½áºÏµÄÄÚ²¿½á¹¹µÄÒýÓã¬È磺
sub new {
my $this = {}; # Create an anonymous hash, and #self points to it.
bless $this; # Connect the hash to the package Cocoa.
return $this; # Return the reference to the hash.
}
1;
{}´´½¨Ò»¸ö¶Ô²»º¬¼ü/Öµ¶ÔµÄ¹þÏ£±í£¨¼´¹ØÁªÊý×飩µÄÒýÓ㬷µ»ØÖµ±»¸³¸ø¾ÖÓò±äÁ¿$this¡£º¯Êýbless()È¡³ö¸ÃÒýÓ㬸æËß¶ÔÏóËüÒýÓõÄÊÇCocoa£¬×îºó·µ»Ø¸ÃÒýÓ᣺¯ÊýµÄ·µ»ØÖµÏÖÔÚÖ¸ÏòÕâ¸öÄäÃû¹þÏ£±í¡£
´Ónew()º¯Êý·µ»Øºó£¬$thisÒýÓñ»Ïú»Ù£¬µ«µ÷Óú¯Êý±£´æÁ˶ԸùþÏ£±íµÄÒýÓã¬Òò´Ë¸Ã¹þÏ£±íµÄÒýÓÃÊý²»»áΪÁ㣬´Ó¶øÊ¹PerlÔÚÄÚ´æÖб£´æ¸Ã¹þÏ£±í¡£´´½¨¶ÔÏó¿ÉÈçϵ÷Óãº
$cup = new Cocoa;
ÏÂÃæÓï¾äΪʹÓøðü´´½¨¶ÔÏóµÄÀý×Ó£º
1 #!/usr/bin/perl
2 push (@INC,'pwd');
3 use Cocoa;
4 $cup = new Cocoa;
µÚÒ»ÐÐÖ¸³öPerl½âÊÍÆ÷µÄλÖ㬵ڶþÐÐÖУ¬½«µ±Ç°Ä¿Â¼¼Óµ½Â·¾¶Ñ°ÕÒÁбí@INCÖй©Ñ°ÕÒ°üʱʹÓá£ÄãÒ²¿ÉÒÔÔÚ²»Í¬µÄĿ¼Öд´½¨ÄãµÄÄ£¿é²¢Ö¸³ö¸Ã¾ø¶Ô·¾¶¡£ÀýÈ磬Èç¹ûÔÚ/home/test/scripts/´´½¨°ü£¬µÚ¶þÐоÍÓ¦¸ÃÈçÏ£º
push (@INC , "/home/test/scripts");
ÔÚµÚÈýÐÐÖУ¬°üº¬ÉϰüCocoa.pmÒÔ»ñÈ¡½Å±¾ÖÐËùÐ蹦ÄÜ¡£useÓï¾ä¸æËßPerlÔÚ@INC·¾¶Ñ°ÕÒÎļþCocoa.pm²¢°üº¬µ½½âÎöµÄÔ´Îļþ¿½±´ÖС£useÓï¾äÊÇʹÓÃÀà±ØÐëµÄ¡£µÚËÄÐе÷ÓÃnewº¯Êý´´½¨¶ÔÏó£¬ÕâÊÇPerlµÄÃî´¦£¬Ò²ÊÇÆäÒ×»ìÏýÖ®´¦£¬Ò²ÊÇÆäÇ¿´óÖ®´¦¡£´´½¨¶ÔÏóµÄ·½·¨ÓжàÖÖ£¬¿ÉÒÔÕâÑùд£º
$cup = cocoa->new();
Èç¹ûÄãÊÇC³ÌÐòÔ±£¬¿ÉÒÔÓÃ˫ðºÅÇ¿ÖÆÊ¹ÓÃCocoa°üÖеÄnew()º¯Êý£¬È磺
$cup = Cocoa::new();
¿ÉÒÔÔÚ¹¹Ô캯ÊýÖмÓÈë¸ü¶àµÄ´úÂ룬ÈçÔÚCocoa.pmÖУ¬¿ÉÒÔÔÚÿ¸ö¶ÔÏó´´½¨Ê±Êä³öÒ»¸ö¼òµ¥ÉùÃ÷£¬»¹¿ÉÒÔÓù¹Ô캯Êý³õʼ»¯±äÁ¿»òÉèÖÃÊý×é»òÖ¸Õë¡£
×¢Ò⣺
1¡¢Ò»¶¨ÒªÔÚ¹¹Ô캯ÊýÖгõʼ»¯±äÁ¿£»
2¡¢Ò»¶¨ÒªÓÃmyº¯ÊýÔÚ·½·¨Öд´½¨±äÁ¿£»
3¡¢Ò»¶¨²»ÒªÔÚ·½·¨ÖÐʹÓÃlocal£¬³ý·ÇÕæµÄÏë°Ñ±äÁ¿´«µÝ¸øÆäËü×Ó³ÌÐò£»
4¡¢Ò»¶¨²»ÒªÔÚÀàÄ£¿éÖÐʹÓÃÈ«¾Ö±äÁ¿¡£
¼ÓÉÏÉùÃ÷µÄCocoa¹¹Ô캯ÊýÈçÏ£º
sub new {
my $this = {};
print "\n /* \n ** Created by Cocoa.pm \n ** Use at own risk";
print "\n ** Did this code even get pass the javac compiler? ";
print "\n **/ \n";
bless $this;
return $this;
}
Ò²¿ÉÒÔ¼òµ¥µØµ÷ÓðüÄÚ»ò°üÍâµÄÆäËüº¯ÊýÀ´×ö¸ü¶àµÄ³õʼ»¯¹¤×÷£¬È磺
sub new {
my $this = {}
bless $this;
$this->doInitialization();
return $this;
}
´´½¨Ààʱ£¬Ó¦¸ÃÔÊÐíËü¿É±»¼Ì³Ð£¬Ó¦¸Ã¿ÉÒÔ°ÑÀàÃû×÷ΪµÚÒ»¸ö²ÎÊýÀ´µ÷ÓÃnewº¯Êý£¬ÄÇônewº¯Êý¾ÍÏóÏÂÃæµÄÓï¾ä£º
sub new {
my $class = shift; # Get the request class name
my $this = {};
bless $this, $class # Use class name to bless() reference
$this->doInitialization(); return $this;
}
´Ë·½·¨Ê¹Óû§¿ÉÒÔÏÂÁÐÈýÖÖ·½Ê½Ö®Ò»À´½øÐе÷Óãº
Cocoa::new()
Cocoa->new()
new Cocoa
¿ÉÒÔ¶à´ÎblessÒ»¸öÒýÓöÔÏó£¬È»¶ø£¬ÐµĽ«±»blessµÄÀà±ØÈ»°Ñ¶ÔÏóÒѱ»blessµÄÒýÓÃÈ¥µô£¬¶ÔCºÍPascal³ÌÐòÔ±À´Ëµ£¬Õâ¾ÍÏó°ÑÒ»¸öÖ¸Õ븳¸ø·ÖÅäµÄÒ»¿éÄڴ棬ÔÙ°ÑͬһָÕ븳¸øÁíÒ»¿éÄÚ´æ¶ø²»Êͷŵôǰһ¿éÄÚ´æ¡£×ÜÖ®£¬Ò»¸öPerl¶ÔÏóÿһʱ¿ÌÖ»ÄÜÊôÓÚÒ»¸öÀà¡£
¶ÔÏóºÍÒýÓõÄÕæÕýÇø±ðÊÇÊ²Ã´ÄØ£¿Perl¶ÔÏó±»blessÒÔÊôÓÚijÀ࣬ÒýÓÃÔò²»È»£¬Èç¹ûÒýÓñ»bless£¬Ëü½«ÊôÓÚÒ»¸öÀ࣬Ҳ±ã³ÉÁ˶ÔÏó¡£¶ÔÏóÖªµÀ×Ô¼ºÊôÓÚÄĸöÀ࣬ÒýÓÃÔò²»ÊôÓÚÈκÎÀà¡£
ʵÀý±äÁ¿
×÷Ϊ¹¹Ô캯ÊýµÄnew()º¯ÊýµÄ²ÎÊý½Ð×öʵÀý±äÁ¿¡£ÊµÀý±äÁ¿ÔÚ´´½¨¶ÔÏóµÄÿ¸öʵÀýʱÓÃÓÚ³õʼ»¯£¬ÀýÈç¿ÉÒÔÓÃnew()º¯ÊýΪ¶ÔÏóµÄÿ¸öʵÀýÆð¸öÃû×Ö¡£
¿ÉÒÔÓÃÄäÃû¹þÏ£±í»òÄäÃûÊý×éÀ´±£´æÊµÀý±äÁ¿¡£
ÓùþÏ£±íµÄ´úÂëÈçÏ£º
sub new {
my $type = shift;
my %parm = @_;
my $this = {};
$this->{'Name'} = $parm{'Name'};
$this->{'x'} = $parm{'x'};
$this->{'y'} = $parm{'y'};
bless $this, $type;
}
ÓÃÊý×é±£´æµÄ´úÂëÈçÏ£º
sub new {
my $type = shift;
my %parm = @_;
my $this = [];
$this->[0] = $parm{'Name'};
$this->[1] = $parm{'x'};
$this->[2] = $parm{'y'};
bless $this, $type;
}
¹¹Ôì¶ÔÏóʱ£¬¿ÉÒÔÈçÏ´«µÝ²ÎÊý£º
$mug = Cocoa::new( 'Name' => 'top','x' => 10,'y' => 20 );
²Ù×÷·û=>Ó붺ºÅ²Ù×÷·þ¹¦ÄÜÏàͬ£¬µ«=>¿É¶ÁÐԺ᣷ÃÎÊ·½·¨ÈçÏ£º
print "Name=$mug->{'Name'}\n";
print "x=$mug->{'x'}\n";
print "y=$mug->{'y'}\n";
Îå¡¢·½·¨
PerlÀàµÄ·½·¨Ö»²»¹ýÊÇÒ»¸öPerl×Ó³ÌÐò¶øÒÑ£¬Ò²¼´Í¨³£Ëù˵µÄ³ÉÔ±º¯Êý¡£PerlµÄ·½·¨¶¨Òå²»ÌṩÈκÎÌØÊâÓï·¨£¬µ«¹æ¶¨·½·¨µÄµÚÒ»¸ö²ÎÊýΪ¶ÔÏó»òÆä±»ÒýÓõİü¡£PerlÓÐÁ½ÖÖ·½·¨£º¾²Ì¬·½·¨ºÍÐé·½·¨¡£
¾²Ì¬·½·¨µÚÒ»¸ö²ÎÊýΪÀàÃû£¬Ðé·½·¨µÚÒ»¸ö²ÎÊýΪ¶ÔÏóµÄÒýÓ᣷½·¨´¦ÀíµÚÒ»¸ö²ÎÊýµÄ·½Ê½¾ö¶¨ÁËËüÊǾ²Ì¬µÄ»¹ÊÇÐéµÄ¡£¾²Ì¬·½·¨Ò»°ãºöÂÔµôµÚÒ»¸ö²ÎÊý£¬ÒòΪËüÃÇÒѾ֪µÀ×Ô¼ºÔÚÄĸöÀàÁË£¬¹¹Ô캯Êý¼´¾²Ì¬·½·¨¡£Ðé·½·¨Í¨³£Ê×ÏȰѵÚÒ»¸ö²ÎÊýshiftµ½±äÁ¿self»òthisÖУ¬È»ºó½«¸ÃÖµ×÷ÆÕͨµÄÒýÓÃʹÓá£È磺
1. sub nameLister {
2. my $this = shift;
3. my ($keys ,$value );
4. while (($key, $value) = each (%$this)) {
5. print "\t$key is $value.\n";
6. }
7. }
Áù¡¢·½·¨µÄÊä³ö
Èç¹ûÄãÏÖÔÚÏëÒýÓÃCocoa.pm°ü£¬½«»áµÃµ½±àÒë´íÎó˵δÕÒµ½·½·¨£¬ÕâÊÇÒòΪCocoa.pmµÄ·½·¨»¹Ã»ÓÐÊä³ö¡£Êä³ö·½·¨ÐèÒªExporterÄ£¿é£¬ÔÚ°üµÄ¿ªÊ¼²¿·Ö¼ÓÉÏÏÂÁÐÁ½ÐУº
require Exporter;
@ISA = qw (Exporter);
ÕâÁ½Ðаüº¬ÉÏExporter.pmÄ£¿é£¬²¢°ÑExporterÀàÃû¼ÓÈë@ISAÊý×éÒÔ¹©²éÕÒ¡£½ÓÏÂÀ´°ÑÄã×Ô¼ºµÄÀà·½·¨ÁÐÔÚ@EXPORTÊý×éÖоͿÉÒÔÁË¡£ÀýÈçÏëÊä³ö·½·¨closeMainºÍdeclareMain£¬Óï¾äÈçÏ£º
@EXPORT = qw (declareMain , closeMain);
PerlÀàµÄ¼Ì³ÐÊÇͨ¹ý@ISAÊý×éʵÏֵġ£@ISAÊý×é²»ÐèÒªÔÚÈκΰüÖж¨Ò壬Ȼ¶ø£¬Ò»µ©Ëü±»¶¨Ò壬Perl¾Í°ÑËü¿´×÷Ŀ¼ÃûµÄÌØÊâÊý×é¡£ËüÓë@INCÊý×éÀàËÆ£¬@INCÊǰüº¬ÎļþµÄѰÕÒ·¾¶¡£@ISAÊý×麬ÓÐÀà(°ü)Ãû£¬µ±Ò»¸ö·½·¨ÔÚµ±Ç°°üÖÐδÕÒµ½Ê±¾Íµ½@ISAÖеİüȥѰÕÒ¡£@ISAÖл¹º¬Óе±Ç°Àà¼Ì³ÐµÄ»ùÀàÃû¡£
ÀàÖе÷ÓõÄËùÓз½·¨±ØÐëÊôÓÚͬһ¸öÀà»ò@ISAÊý×鶨ÒåµÄ»ùÀà¡£Èç¹ûÒ»¸ö·½·¨ÔÚ@ISAÊý×éÖÐδÕÒµ½£¬Perl¾Íµ½AUTOLOAD()×Ó³ÌÐòÖÐѰÕÒ£¬Õâ¸ö¿ÉÑ¡µÄ×Ó³ÌÐòÔÚµ±Ç°°üÖÐÓÃsub¶¨Òå¡£ÈôʹÓÃAUTOLOAD×Ó³ÌÐò£¬±ØÐëÓÃuse Autoload;Óï¾äµ÷ÓÃautoload.pm°ü¡£AUTOLOAD×Ó³ÌÐò³¢ÊÔ´ÓÒѰ²×°µÄPerl¿âÖÐ×°ÔØµ÷Óõķ½·¨¡£Èç¹ûAUTOLOADҲʧ°ÜÁË£¬PerlÔÙµ½UNIVERSALÀà×ö×îºóÒ»´Î³¢ÊÔ£¬Èç¹ûÈÔʧ°Ü£¬Perl¾ÍÉú³É¹ØÓÚ¸ÃÎÞ·¨½âÎöº¯ÊýµÄ´íÎó¡£
Æß¡¢·½·¨µÄµ÷ÓÃ
µ÷ÓÃÒ»¸ö¶ÔÏóµÄ·½·¨ÓÐÁ½ÖÖ·½·¨£¬Ò»ÊÇͨ¹ý¸Ã¶ÔÏóµÄÒýÓã¨Ðé·½·¨£©£¬Ò»ÊÇÖ±½ÓʹÓÃÀàÃû£¨¾²Ì¬·½·¨£©¡£µ±È»¸Ã·½·¨±ØÐëÒѱ»Êä³ö¡£ÏÖÔÚ¸øCocoaÀàÔö¼ÓһЩ·½·¨£¬´úÂëÈçÏ£º
package Cocoa;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(setImports, declareMain, closeMain);
#
# This routine creates the references for imports in Java functions
#
sub setImports{
my $class = shift @_;
my @names = @_;
foreach (@names) {
print "import " . $_ . ";\n";
}
}
#
# This routine declares the main function in a Java script
#
sub declareMain{
my $class = shift @_;
my ( $name, $extends, $implements) = @_;
print "\n public class $name";
if ($extends) {
print " extends " . $extends;
}
if ($implements) {
print " implements " . $implements;
}
print " { \n";
}
#
# This routine declares the main function in a Java script
#
sub closeMain{
print "} \n";
}
#
# This subroutine creates the header for the file.
#
sub new {
my $this = {};
print "\n /* \n ** Created by Cocoa.pm \n ** Use at own risk \n */ \n";
bless $this;
return $this;
}
1;
ÏÖÔÚ£¬ÎÒÃÇдһ¸ö¼òµ¥µÄPerl½Å±¾À´Ê¹ÓøÃÀàµÄ·½·¨£¬ÏÂÃæÊÇ´´½¨Ò»¸öJava appletÔ´´úÂë¹Ç¼ÜµÄ½Å±¾´úÂ룺
#!/usr/bin/perl
use Cocoa;
$cup = new Cocoa;
$cup->setImports( 'java.io.InputStream', 'java.net.*');
$cup->declareMain( "Msg" , "java.applet.Applet", "Runnable");
$cup->closeMain();
Õâ¶Î½Å±¾´´½¨ÁËÒ»¸ö½Ð×öMsgµÄJava applet£¬ËüÀ©Õ¹(extend)ÁËjava.applet.AppletСӦÓóÌÐò²¢Ê¹Ö®¿ÉÔËÐÐ(runnable)£¬ÆäÖÐ×îºóÈýÐÐÒ²¿ÉÒÔд³ÉÈçÏ£º
Cocoa::setImports($cup, 'java.io.InputStream', 'java.net.*');
Cocoa::declareMain($cup, "Msg" , "java.applet.Applet", "Runnable");
Cocoa::closeMain($cup);
ÆäÔËÐнá¹ûÈçÏ£º
/*
** Created by Cocoa.pm
** Use at own risk
*/
import java.io.InputStream;
import java.net.*;
public class Msg extends java.applet.Applet implements Runnable {
}
×¢Ò⣺Èç¹ûÓÃ->²Ù×÷·ûµ÷Ó÷½·¨£¨Ò²½Ð¼ä½Óµ÷Óã©£¬²ÎÊý±ØÐëÓÃÀ¨ºÅÀ¨ÆðÀ´£¬È磺$cup->setImports( 'java.io.InputStream', 'java.net.*');¶øË«Ã°ºÅµ÷ÓÃÈ磺Cocoa::setImports($cup, 'java.io.InputStream', 'java.net.*');Ò²¿ÉÈ¥µôÀ¨ºÅд³É£ºCocoa::setImports $cup, 'java.io.InputStream', 'java.net.*' ;
°Ë¡¢ÖØÔØ
ÓÐʱÐèÒªÖ¸¶¨Ê¹ÓÃÄĸöÀàµÄ·½·¨£¬ÈçÁ½¸ö²»Í¬µÄÀàÓÐͬÃû·½·¨µÄʱºò¡£¼ÙÉèÀàEspressoºÍQava¶¼¶¨ÒåÁË·½·¨grind£¬¿ÉÒÔÓÃ::²Ù×÷·ûÖ¸¶¨Ê¹ÓÃQavaµÄ·½·¨£º
$mess = Qava::grind("whole","lotta","bags");
Qava::grind($mess, "whole","lotta","bags");
¿ÉÒÔ¸ù¾Ý³ÌÐòµÄÔËÐÐÇé¿öÀ´Ñ¡ÔñʹÓÃÄĸöÀàµÄ·½·¨£¬Õâ¿ÉÒÔͨ¹ýʹÓ÷ûºÅÒýÓÃÈ¥µ÷ÓÃÀ´ÊµÏÖ£º
$method = $local ? "Qava::" : "Espresso::";
$cup->{$method}grind(@args);
¾Å¡¢Îö¹¹º¯Êý
Perl¸ú×Ù¶ÔÏóµÄÁ´½ÓÊýÄ¿£¬µ±Ä³¶ÔÏóµÄ×îºóÒ»¸öÓ¦ÓÃÊͷŵ½ÄÚ´æ³ØÊ±£¬¸Ã¶ÔÏó¾Í×Ô¶¯Ïú»Ù¡£¶ÔÏóµÄÎö¹¹·¢ÉúÔÚ´úÂëÍ£Ö¹ºó£¬½Å±¾½«Òª½áÊøÊ±¡£¶ÔÓÚÈ«¾Ö±äÁ¿¶øÑÔ£¬Îö¹¹·¢ÉúÔÚ×îºóÒ»ÐдúÂëÔËÐÐÖ®ºó¡£
Èç¹ûÄãÏëÔÚ¶ÔÏó±»ÊÍ·Å֮ǰ»ñÈ¡¿ØÖÆÈ¨£¬¿ÉÒÔ¶¨ÒåDESTROY()·½·¨¡£DESTROY()ÔÚ¶ÔÏó½«ÊÍ·Åǰ±»µ÷Óã¬Ê¹Äã¿ÉÒÔ×öһЩÇåÀí¹¤×÷¡£DESTROY()º¯Êý²»×Ô¶¯µ÷ÓÃÆäËüDESTROY()º¯Êý£¬Perl²»×öÄÚÖõÄÎö¹¹¹¤×÷¡£Èç¹û¹¹Ô캯Êý´Ó»ùÀà¶à´Îbless£¬DESTROY()¿ÉÄÜÐèÒªµ÷ÓÃÆäËüÀàµÄDESTROY()º¯Êý¡£µ±Ò»¸ö¶ÔÏó±»ÊÍ·Åʱ£¬ÆäÄÚº¬µÄËùÓжÔÏóÒýÓÃ×Ô¶¯ÊÍ·Å¡¢Ïú»Ù¡£
Ò»°ãÀ´Ëµ£¬²»ÐèÒª¶¨ÒåDESTROY()º¯Êý£¬Èç¹ûÐèÒª£¬ÆäÐÎʽÈçÏ£º
sub DESTROY {
#
# Add code here.
#
}
ÒòΪ¶àÖÖÄ¿µÄ£¬PerlʹÓÃÁ˼òµ¥µÄ¡¢»ùÓÚÒýÓõÄÀ¬»ø»ØÊÕϵͳ¡£ÈκζÔÏóµÄÒýÓÃÊýÄ¿±ØÐë´óÓÚÁ㣬·ñÔò¸Ã¶ÔÏóµÄÄÚ´æ¾Í±»ÊÍ·Å¡£µ±³ÌÐòÍ˳öʱ£¬PerlµÄÒ»¸ö³¹µ×µÄ²éÕÒ²¢Ïú»Ùº¯Êý½øÐÐÀ¬»ø»ØÊÕ£¬½ø³ÌÖеÄÒ»Çб»¼òµ¥µØÉ¾³ý¡£ÔÚUNIXÀàµÄϵͳÖУ¬ÕâÏñÊǶàÓàµÄ£¬µ«ÔÚÄÚǶʽϵͳ»ò¶àÏ̻߳·¾³ÖÐÕâȷʵºÜ±ØÒª¡£
Ê®¡¢¼Ì³Ð
Àà·½·¨Í¨¹ý@ISAÊý×é¼Ì³Ð£¬±äÁ¿µÄ¼Ì³Ð±ØÐëÃ÷È·É趨¡£ÏÂÀý´´½¨Á½¸öÀàBean.pmºÍCoffee.pm£¬ÆäÖÐCoffee.pm¼Ì³ÐBean.pmµÄһЩ¹¦ÄÜ¡£´ËÀýÑÝʾÈçºÎ´Ó»ùÀࣨ»ò³Æ³¬Àࣩ¼Ì³ÐʵÀý±äÁ¿£¬Æä·½·¨Îªµ÷ÓûùÀàµÄ¹¹Ô캯Êý²¢°Ñ×Ô¼ºµÄʵÀý±äÁ¿¼Óµ½Ð¶ÔÏóÖС£
Bean.pm´úÂëÈçÏ£º
package Bean;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(setBeanType);
sub new {
my $type = shift;
my $this = {};
$this->{'Bean'} = 'Colombian';
bless $this, $type;
return $this;
}
#
# This subroutine sets the class name
sub setBeanType{
my ($class, $name) = @_;
$class->{'Bean'} = $name;
print "Set bean to $name \n";
}
1;
´ËÀàÖУ¬ÓÃ$this±äÁ¿ÉèÖÃÒ»¸öÄäÃû¹þÏ£±í£¬½«'Bean'ÀàÐÍÉèΪ'Colombian'¡£·½·¨setBeanType()ÓÃÓڸıä'Bean'ÀàÐÍ£¬ËüʹÓÃ$classÒýÓûñµÃ¶Ô¶ÔÏó¹þÏ£±íµÄ·ÃÎÊ¡£
Coffee.pm´úÂëÈçÏ£º
1 #
2 # The Coffee.pm file to illustrate inheritance.
3 #
4 package Coffee;
5 require Exporter;
6 require Bean;
7 @ISA = qw(Exporter, Bean);
8 @EXPORT = qw(setImports, declareMain, closeMain);
9 #
10 # set item
11 #
12 sub setCoffeeType{
13 my ($class,$name) = @_;
14 $class->{'Coffee'} = $name;
15 print "Set coffee type to $name \n";
16 }
17 #
18 # constructor
19 #
20 sub new {
21 my $type = shift;
22 my $this = Bean->new(); ##### <- LOOK HERE!!! ####
23 $this->{'Coffee'} = 'Instant'; # unless told otherwise
24 bless $this, $type;
25 return $this;
26 }
27 1;
µÚ6ÐеÄrequire Bean;Óï¾ä°üº¬ÁËBean.pmÎļþºÍËùÓÐÏà¹Øº¯Êý£¬·½·¨setCoffeeType()ÓÃÓÚÉèÖþÖÓò±äÁ¿$class->{'Coffee'}µÄÖµ¡£ÔÚ¹¹Ô캯Êýnew()ÖУ¬$thisÖ¸ÏòBean.pm·µ»ØµÄÄäÃû¹þÏ£±íµÄÖ¸Õ룬¶ø²»ÊÇÔÚ±¾µØ´´½¨Ò»¸ö£¬ÏÂÃæÁ½¸öÓï¾ä·Ö±ðΪ´´½¨²»Í¬µÄ¹þÏ£±í´Ó¶øÓëBean.pm¹¹Ô캯Êý´´½¨µÄ¹þÏ£±íÎ޹صÄÇé¿öºÍ¼Ì³ÐµÄÇé¿ö£º
my $this = {}; #·Ç¼Ì³Ð
my $this = $theSuperClass->new(); #¼Ì³Ð
ÏÂÃæ´úÂëÑÝʾÈçºÎµ÷Óü̳еķ½·¨£º
1 #!/usr/bin/perl
2 push (@INC,'pwd');
3 use Coffee;
4 $cup = new Coffee;
5 print "\n -------------------- Initial values ------------ \n";
6 print "Coffee: $cup->{'Coffee'} \n";
7 print "Bean: $cup->{'Bean'} \n";
8 print "\n -------------------- Change Bean Type ---------- \n";
9 $cup->setBeanType('Mixed');
10 print "Bean Type is now $cup->{'Bean'} \n";
11 print "\n ------------------ Change Coffee Type ---------- \n";
12 $cup->setCoffeeType('Instant');
13 print "Type of coffee: $cup->{'Coffee'} \n";
¸Ã´úÂëµÄ½á¹ûÊä³öÈçÏ£º
-------------------- Initial values ------------
Coffee: Instant
Bean: Colombian
-------------------- Change Bean Type ----------
Set bean to Mixed
Bean Type is now Mixed
------------------ Change Coffee Type ----------
Set coffee type to Instant
Type of coffee: Instant
ÉÏÊö´úÂëÖУ¬ÏÈÊä³ö¶ÔÏó´´½¨Ê±¹þÏ£±íÖÐË÷ÒýΪ'Bean'ºÍ'Coffee'µÄÖµ£¬È»ºóµ÷Óø÷³ÉÔ±º¯Êý¸Ä±äÖµºóÔÙÊä³ö¡£
·½·¨¿ÉÒÔÓжà¸ö²ÎÊý£¬ÏÖÔÚÏòCoffee.pmÄ£¿éÔö¼Óº¯ÊýmakeCup()£¬´úÂëÈçÏ£º
sub makeCup {
my ($class, $cream, $sugar, $dope) = @_;
print "\n================================== \n";
print "Making a cup \n";
print "Add cream \n" if ($cream);
print "Add $sugar sugar cubes\n" if ($sugar);
print "Making some really addictive coffee ;-) \n" if ($dope);
print "================================== \n";
}
´Ëº¯Êý¿ÉÓÐÈý¸ö²ÎÊý£¬²»Í¬ÊýÄ¿¡¢ÖµµÄ²ÎÊý²úÉú²»Í¬µÄ½á¹û£¬ÀýÈ磺
1 #!/usr/bin/perl
2 push (@INC,'pwd');
3 use Coffee;
4 $cup = new Coffee;
5 #
6 # With no parameters
7 #
8 print "\n Calling with no parameters: \n";
9 $cup->makeCup;
10 #
11 # With one parameter
12 #
13 print "\n Calling with one parameter: \n";
14 $cup->makeCup('1');
15 #
16 # With two parameters
17 #
18 print "\n Calling with two parameters: \n";
19 $cup->makeCup(1,'2');
20 #
21 # With all three parameters
22 #
23 print "\n Calling with three parameters: \n";
24 $cup->makeCup('1',3,'1');
Æä½á¹ûÊä³öÈçÏ£º
Calling with no parameters:
==================================
Making a cup
==================================
Calling with one parameter:
==================================
Making a cup
Add cream
==================================
Calling with two parameters:
==================================
Making a cup
Add cream
Add 2 sugar cubes
==================================
Calling with three parameters:
==================================
Making a cup
Add cream
Add 3 sugar cubes
Making some really addictive coffee ;-)
==================================
ÔÚ´ËÀýÖУ¬º¯ÊýmakeCup()µÄ²ÎÊý¼È¿ÉΪ×Ö·û´®Ò²¿ÉΪÕûÊý£¬´¦Àí½á¹ûÏàͬ£¬ÄãÒ²¿ÉÒÔ°ÑÕâÁ½ÖÖÀàÐ͵ÄÊý¾Ý´¦ÀíÇø·Ö¿ª¡£ÔÚ¶Ô²ÎÊýµÄ´¦ÀíÖУ¬¿ÉÒÔÉèÖÃȱʡµÄÖµ£¬Ò²¿ÉÒÔ¸ù¾Ýʵ¼ÊÊäÈë²ÎÊýÖµµÄ¸öÊý¸øÓ費ͬ´¦Àí¡£
ʮһ¡¢×ÓÀà·½·¨µÄÖØÔØ
¼Ì³ÐµÄºÃ´¦ÔÚÓÚ¿ÉÒÔ»ñµÃ»ùÀàÊä³öµÄ·½·¨µÄ¹¦ÄÜ£¬¶øÓÐʱÐèÒª¶Ô»ùÀàµÄ·½·¨ÖØÔØÒÔ»ñµÃ¸ü¾ßÌå»ò²»Í¬µÄ¹¦ÄÜ¡£ÏÂÃæÔÚBean.pmÀàÖмÓÈë·½·¨printType()£¬´úÂëÈçÏ£º
sub printType {
my $class = shift @_;
print "The type of Bean is $class->{'Bean'} \n";
}
È»ºó¸üÐÂÆä@EXPORTÊý×éÀ´Êä³ö£º
@EXPORT = qw ( setBeanType , printType );
ÏÖÔÚÀ´µ÷Óú¯ÊýprintType()£¬ÓÐÈýÖÖµ÷Ó÷½·¨£º
$cup->Coffee::printType();
$cup->printType();
$cup->Bean::printType();
Êä³ö·Ö±ðÈçÏ£º
The type of Bean is Mixed
The type of Bean is Mixed
The type of Bean is Mixed
Ϊʲô¶¼Ò»ÑùÄØ£¿ÒòΪÔÚ×ÓÀàÖÐûÓж¨Ò庯ÊýprintType()£¬ËùÒÔʵ¼Ê¾ùµ÷ÓÃÁË»ùÀàÖеķ½·¨¡£Èç¹ûÏëʹ×ÓÀàÓÐÆä×Ô¼ºµÄprintType()º¯Êý£¬±ØÐëÔÚCoffee.pmÀàÖмÓÒÔ¶¨Ò壺
#
# This routine prints the type of $class->{'Coffee'}
#
sub printType {
my $class = shift @_;
print "The type of Coffee is $class->{'Coffee'} \n";
}
È»ºó¸üÐÂÆä@EXPORTÊý×飺
@EXPORT = qw(setImports, declareMain, closeMain, printType);
ÏÖÔÚÊä³ö½á¹û±ä³ÉÁË£º
The type of Coffee is Instant
The type of Coffee is Instant
The type of Bean is Mixed
ÏÖÔÚÖ»Óе±¸ø¶¨ÁËBean::ʱ²Åµ÷ÓûùÀàµÄ·½·¨£¬·ñÔòÖ±½Óµ÷ÓÃ×ÓÀàµÄ·½·¨¡£
ÄÇôÈç¹û²»ÖªµÀ»ùÀàÃû¸ÃÈçºÎµ÷ÓûùÀà·½·¨ÄØ£¿·½·¨ÊÇʹÓÃαÀà±£Áô×ÖSUPER::¡£ÔÚÀà·½·¨ÄÚʹÓÃÓï·¨È磺$this->SUPER::function(...argument list...); £¬Ëü½«´Ó@ISAÁбíÖÐѰÕÒ¡£¸Õ²ÅµÄÓï¾äÓÃSUPER::Ìæ»»Bean::¿ÉÒÔдΪ$cup->SUPER::printType(); £¬Æä½á¹ûÊä³öÏàͬ£¬Îª£º
The type of Bean is Mixed
Ê®¶þ¡¢PerlÀàºÍ¶ÔÏóµÄһЩעÊÍ
OOPµÄ×î´óºÃ´¦¾ÍÊÇ´úÂëÖØÓá£OOPÓÃÊý¾Ý·â×°À´Òþ²ØÒ»Ð©¸´ÔӵĴúÂ룬PerlµÄ°üºÍÄ£¿éͨ¹ýmyº¯ÊýÌṩÊý¾Ý·â×°¹¦ÄÜ£¬µ«ÊÇPerl²¢²»±£Ö¤×ÓÀàÒ»¶¨²»»áÖ±½Ó·ÃÎÊ»ùÀàµÄ±äÁ¿£¬Õâȷʵ¼õÉÙÁËÊý¾Ý·â×°µÄºÃ´¦£¬ËäÈ»ÕâÖÖ¶¯×÷ÊÇ¿ÉÒÔ×öµ½µÄ£¬µ«È´ÊǸöºÜ»µµÄ±à³Ì·ç¸ñ¡£
×¢Ò⣺1¡¢Ò»¶¨ÒªÍ¨¹ý·½·¨À´·ÃÎÊÀà±äÁ¿¡£ 2¡¢Ò»¶¨²»Òª´ÓÄ£¿éÍⲿֱ½Ó·ÃÎÊÀà±äÁ¿¡£
µ±±àд°üʱ£¬Ó¦¸Ã±£Ö¤·½·¨ËùÐèµÄÌõ¼þÒѾ߱¸»òͨ¹ý²ÎÊý´«µÝ¸øËü¡£ÔÚ°üÄÚ²¿£¬Ó¦±£Ö¤¶ÔÈ«¾Ö±äÁ¿µÄ·ÃÎÊÖ»ÓÃͨ¹ý·½·¨´«µÝµÄÒýÓÃÀ´·ÃÎÊ¡£¶ÔÓÚ·½·¨ÒªÊ¹Óõľ²Ì¬»òÈ«¾ÖÊý¾Ý£¬Ó¦¸ÃÔÚ»ùÀàÖÐÓÃlocal()À´¶¨Ò壬×ÓÀàͨ¹ýµ÷ÓûùÀàÀ´»ñÈ¡¡£ÓÐʱ£¬×ÓÀà¿ÉÄÜÐèÒª¸Ä±äÕâÖÖÊý¾Ý£¬Õâʱ£¬»ùÀà¿ÉÄܾͲ»ÖªµÀÔõÑùȥѰÕÒеÄÊý¾Ý£¬Òò´Ë£¬Õâʱ×îºÃ¶¨Òå¶Ô¸ÃÊý¾ÝµÄÒýÓã¬×ÓÀàºÍ»ùÀ඼ͨ¹ýÒýÓÃÀ´¸Ä±ä¸ÃÊý¾Ý¡£
×îºó£¬Ä㽫¿´µ½ÈçÏ·½Ê½À´Ê¹ÓöÔÏóºÍÀࣺ
use coffee::Bean;
Õâ¾äÓï¾äµÄº¬ÒåÊÇ¡°ÔÚ@INCÊý×éËùÓÐĿ¼µÄCoffee×ÓĿ¼À´Ñ°ÕÒBean.pm¡±¡£Èç¹û°ÑBean.pmÒÆµ½./CoffeeĿ¼£¬ÉÏÃæµÄÀý×Ó½«ÓÃÕâÒ»useÓï¾äÀ´¹¤×÷¡£ÕâÑùµÄºÃ´¦ÊÇÓÐÌõÀíµØ×éÖ¯ÀàµÄ´úÂë¡£ÔÙÈ磬ÏÂÃæµÄÓï¾ä£º
use Another::Sub::Menu;
Òâζ×ÅÈçÏÂ×ÓĿ¼Ê÷£º
./Another/Sub/Menu.pm
ÉÏÒ»Õ ÏÂÒ»Õ Ŀ¼
|
|