亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Perl > 正文

Perl語言全面編譯(三)

2019-11-18 17:23:51
字體:
供稿:網(wǎng)友
第四節(jié) PerlCC之Bytecode 編譯解析法 
Bytecode 是 PerlCC的另一編譯方法,必須在Perl5.6以后版本才有得支持。它的原理就好像java一樣,它會把Perl文件編譯成二進制令人費解的亂碼文件,它是采用類似md5這樣的反向加密編碼,幾乎不可能反編譯,和可執(zhí)行程序一樣復雜,但是它不可以直接執(zhí)行哦。想要執(zhí)行它,必須用Perl解析器,就好像 Java 編譯后必須有Java解析器,否則就無法執(zhí)行。我習慣成為編譯解析法,有的時候就說Just Like Java PRogam! 
它的編譯方法也不難,但是竟然有很多人都不知道,我問過很多Perl前輩,他們也不大了解這一方法。而且很多我也從來見過誰寫過這樣的程序(難道我是國內(nèi)第一個知道的嗎?:) 
使用方法:perlcc –b <程序名>  
編譯后它會輸出一個<程序名.plc>文件,你打開它看,定會吃驚。而且這種文件最小是180KB,比perlcc C語言轉(zhuǎn)換編譯多了很多?!?br>它的好處在于,一處編譯到處使用。但是對于CGI就不大好處理。所以還是建議在各個平臺進行編譯。 
例如我ByteCode編譯上節(jié)的abc.pl程序文件: 
輸入: 
perlcc –b abc.pl 
Perlcc –B 輸出 
---------------------------------------------------------------------------- 
Compiling abc.pl: 
---------------------------------------------------------------------------- 
Making Bytecode(abc.plc) for abc.pl! 
C:/perl/5.6.0/bin/MSWin32-x86/perl.exe -IC:/perl/5.6.0/lib/MSWin32-x86 -IC:/perl 
/5.6.0/lib -IC:/perl/site/5.6.0/lib/MSWin32-x86 -IC:/perl/site/5.6.0/lib -I. -MB 
::Stash -c abc.pl 
C:/perl/5.6.0/bin/MSWin32-x86/perl.exe -IC:/perl/5.6.0/lib/MSWin32-x86 -IC:/perl 
/5.6.0/lib -IC:/perl/site/5.6.0/lib/MSWin32-x86 -IC:/perl/site/5.6.0/lib -I. -MO 
=Bytecode,-umain,-uattributes,-uDB,-uWin32 abc.pl 
abc.pl syntax OK 
好了,然后perl abc.plc 就可以執(zhí)行了?!?br>執(zhí)行注意事項: 
使用Bytecode 編譯后的文件,你一般需要更名回原來的文件名,否則容易在運行程序后出現(xiàn)警告信息“Attempt to free unreferenced scalar.”雖然它對程序沒有本質(zhì)影響,但是不美觀嘛,另一種解決方法就是使用 perl –X ,關閉所有警告消息,警告不等同與錯誤,所以一般情況下,某些警告是不必要的?!?br>同樣ByteCode 編譯程序可以被引用(require)但是不能調(diào)用(use),可以作為對象編程的對象。這是一個很靈活的東西,如果你希望你的模塊被大家使用,但是不想讓大家知道其中的操作,那么你就是用ByteCode,但是你的模塊將永遠不會被納入CPAN。這種方法就好像OCX控件?!?br>但是注意,但是使用某個模塊的時候,你必須保證使用該程序的機器上有這個模塊,最簡單的方法你可以把模塊一起復制使用,但是有些第三方程序模塊需要重新編譯,你如果不希望其它人操作模塊或者是看到引用的模塊,也可以使用Bytecode。但是注意,一定要用require方法調(diào)用加密模塊啊。這個世界總是這樣,總會有些遺憾的,這樣的話就不能用一些模塊和OOP?!?br>不知道你了解Python這個語言否?它Perl很相像,比Perl還有簡單呢。但是我認為很多東西都是抄Perl的,包括它得二進制編譯方法,就和Perl Bytecode沒有任何區(qū)別。反正大家也都知道php也是抄了Perl不少東西?!?br>

--------------------------------------------------------------------------------
 

第五節(jié) OOP面向?qū)ο蟮某绦蛑疄榫幾g而設計 
面向?qū)ο蟮某绦蛟O計已經(jīng)不是什么新穎的話題和技術了。它在C 和Java中,尤為重要,哎,我覺得在寫大宗程序的時候會很有幫助,但是在小程序里面反而麻煩,還不如普通的函數(shù)使用。OOP大多數(shù)基本的Perl教程都有說明,所以這里也不多講“廢話”,主要講述OOP在編譯Perl程序中的應用以及Perl OOP編寫的技巧,所以值得一看?!?br>前面說過在PerlCC編譯可執(zhí)行程序的時候,不要使用require函數(shù),這是沒有錯的。但是有很多人寫require習慣了,而且不經(jīng)常接觸OOP模式,所以不習慣?!?br>其實使用use比require 好很多,還有很多人用require引入變量,這是大大錯誤,這是一種程序上編寫的失誤,所以建議以后大家不要用這種方式。編譯的時候也不要用這種放式?那么用什么方式?如果你是一個有經(jīng)驗的Perl程序員,你應該知道。使用OPEN函數(shù),傳送變量值。這是編譯Perl程序的關鍵,一些定量(不變的量),最好放在程序內(nèi)部,變量以及客戶所需要設置的量使用我先前說的那種方式。具體實踐方法: 
Tanshuai OpenConf 函數(shù)代碼: 

 sub Open_Conf { 

         open(FILE, "$_[0]");#打開~調(diào)用函數(shù)的文件名 

         my @Conf_Info = ;#賦予~文件內(nèi)容到@Conf_Info數(shù)組中 

         close(FILE);#關閉~文件 

     my $Conf_Infos ;定義~局部變量 

         foreach $Conf_Infos (@Conf_Info) {#循環(huán) 

                ($name, $value) = split(/=/, $Conf_Infos);#區(qū)分~名稱和數(shù)值 

                ($value, $dot) = split(/;/, $value);#區(qū)分~結(jié)束符 

               $value=~s"'""gi;#刪除~不必要的符號 

              $CFG{$name} = $value;#復制~參數(shù)到散列變量 

         } 

         

} 
配置文件原形: 
Port='81'; 

 
這樣就解決了配置變量的問題,我想這個函數(shù)對某些人一定會有很重要的意義?!?br>在這里OOP就是use 方式的調(diào)用?!?br>現(xiàn)在我們要著重討論OOP問題了,如果你不想把一大堆的程序代碼寫在一個文件中,那么使用OOP就最好了,原來是可以使用require,但這里不可一。OOP在Perl的好處顯而易見,首先可以編譯,即使不編譯,它也同require有明顯差異。 
OOP是在程序需要時調(diào)入,不需要時自動消失(通常說破壞對象)。require則不然,一旦調(diào)入一直存在,除非你使用exit 函數(shù),所以在某些方面影響了程序的效率?!?br>例如我們要寫一個Shell程序,一共需要一下部分:輸入/輸出(I/O)、命令判斷(CMD)、System(系統(tǒng)操作)?!?br>我們平時也可以使用require,在編譯的時候就好了,同樣我們雖然可以按照子程序放在一個程序里面,但是在這里只是例子,但是在大宗商業(yè)項目中,這樣做是顯然費時費力的,會增加維護成本,無法聯(lián)合開發(fā)等多種弊端?!?br>我們把他們分為4個文件3個模塊一個主程序(編譯):IO.pm、CMD.pm、System.pm、Shell.pl?!?br>首先要構(gòu)造對象: 
Tanshuai 對象構(gòu)造方法: 

package <包名或者對象名>; 

my IN;#定義~包(對象)內(nèi)部的散列 

sub new {#構(gòu)造函數(shù)名 

         my $class = shift; 

         IN= @_;#將調(diào)用對象的數(shù)值傳入散列IN中 

         my $self={}; 

         bless $self,$class; 

         return $self; 

} 
 
 
 
雖然上面的構(gòu)造有些不好的地方,但是它是通用對象的構(gòu)造方法,利于調(diào)試,如果你認為沒程序上的問題,就可以“封包”,適當修改變量傳引方式?!?br>這里的所有對象只有是一個單一函數(shù),只包括:構(gòu)造對象和操作對象的兩個部分,這是一個簡單的對象引用,但是這種應用在實際的開發(fā)總是相當無畏的,在這里是為了方便教大家,所以不要什么程序都要對象。 
IO.pm: 
package IO; 

my IN; 

sub new { 

         my $class = shift; 

         IN = @_; 

         my $self={}; 

         bless $self,$class; 

         return $self; 

} 

  

sub do {#操作對象函數(shù) 

         my $self=shift; 

         defined ($_ = <>);#啟動Shell得取輸入信息 

       chomp;#去掉無用的字符 

                 s/^/s //;#過濾危險字符 

             my $cmd = $_;#復制量 

           return $cmd;#返回量 

} 

  

1; 
 
 
CMD.pm: 

 package CMD; 

my IN; 

sub new { 

         my $class = shift; 

         IN = @_; 

         my $self={}; 

         bless $self,$class; 

         return $self; 

} 

  

sub do {#操作對象函數(shù) 

my $self=shift; 

  my $cmd = @_ ;#傳入調(diào)用程序的命令 

while (){#執(zhí)行循環(huán),直到退出 

         if ($cmd eq 'ver') { 

                   print "Tanshuai Command Shell v.1.0.0.001225b/n"; 

                   print "(C)Copyright Tanshuai.Com 1997-2001/n"; 

                   print 'EMAIL:tanshuai@BIGFOOT.COM'; 

                   print "/n"; 

                   &do; 

         } 

         elsif ($cmd eq ""){ 

                   &do; 

                   exit; 

         } 

         elsif ($cmd eq 'exit'){ 

                   print "Exit System"; 

                   exit; 

         } 

         elsif ($cmd eq ‘dir'){ 

                   use System;#使用包System 

my $sys = System ::new ;#建立基于System包的對象$sys 

$sys->do($cmd) ;#操作對象sys傳送命令 

                   &do; 

                   } 

         else { 

          print " Command Not Found "; 

                   &do; 

                   } 

         } 

} 

} 

 1;
 
System.pm: 
Package System; 

my IN; 

sub new { 

         my $class = shift; 

         IN = @_; 

         my $self={}; 

         bless $self,$class; 

         return $self; 

} 

  

sub do {#操作對象函數(shù) 

         my $self=shift; 

my $cmd = @_ ; 

system($cmd) ;#使用System函數(shù)
操作系統(tǒng),啟動dir命令 

  

  

1; 
 
以上各個模塊(對象)已經(jīng)建立完畢,我們現(xiàn)在只需要設計一個簡單的操作對象程序。這個時候你發(fā)現(xiàn)搞對象原始是如此簡單:) 
Shell.pl 主程序: 
use IO;#調(diào)用~模塊(對象) IO.pm 

use CMD;#調(diào)用~模塊(對象) CMD.pm 

  

  

my $IO = IO::new;#創(chuàng)建對象~$IO 

my $CMD = CMD::new;#創(chuàng)建對象~$CMD 

  

  

my $GetInput = $IO->do;#從對象IO得到輸入信息; 

$CMD->do("$GetInput");#將得到的輸入信息發(fā)送給對象$CMD,進行分析操作?!?br>
exit ; 
 
 
 
這樣就完成了,你可能問為什么沒有使用對象System???那是因為在對象CMD中繼承對象System,所以我們不需要在程序中使用System,要不然就累了?!?br>當你看到shell.pl程序時候,你有何感想?是不是覺得搞對象簡單了很多呢?給我的想法就是,以后程序員會越來越多,因為對象編程太簡單了,而我們呢?哎,我們就去做對象。以后編程和做對象的人可能要區(qū)分開來了。 
現(xiàn)在編譯shell.pl后,把這些對象刪除,看看能否使用?當然能,假如你使用require就出現(xiàn)無法執(zhí)行的致命錯誤?!?br>哎呀,好累了。我就要吐血了 #$@,還沒有吃晚飯呢。明日繼續(xù)吧?! ?br>這里告訴大家編譯Perl在較大或者較復雜的程序項目中,使用對象,會有很好的作用。你可能會問,用對象編譯出來的程序如此之大,是否會影響效率?肯定會,但是它并非明顯,就好像一個小小的15KB的程序,在運行的時候可能占用超過100MB的內(nèi)存。由于它會整個被內(nèi)存啟動,但是并不會有較大幅度的效率下降。如果還想使用類似require的方法,就要看最后一章了?!?br>
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

国产精品久久久影院| 国产精品麻豆一区二区三区| 在线激情网站| 免费久久精品视频| 精品久久久久久中文字幕动漫| 国产a级片免费看| 亚洲精品成人无限看| 最新国产精品视频| 国产高潮av| 国产精品剧情一区二区在线观看| 天堂久久一区二区三区| 亚洲a成v人在线观看| jiujiure精品视频播放| 97国产精品人人爽人人做| 男男gaygays亚洲| 久久国产视频播放| 亚洲制服中文字幕| www.成人网.com| 性插视频在线观看| 国产精品久久久久久久泡妞| 精品国产乱码一区二区三区四区| 97在线观看免费| 国产日韩欧美一区二区东京热| 青草在线视频在线观看| 国产原创popny丨九色| 中文字幕一区二区三区视频| 婷婷电影在线观看| 精品无人乱码| 国产精品情侣自拍| 国产精品呻吟久久| 黄色av网址在线播放| 第一视频专区在线| 国产福利第一页| 看黄色免费网站| 国产精品视频一区二区三区麻豆| 国产美女特级嫩嫩嫩bbb片| 亚洲无中文字幕| 欧美精品videossex变态| 日韩人妻精品无码一区二区三区| 成人免费在线视频网址| 岛国在线最新| 变态另类ts人妖一区二区| 久久一区二区视频| 男女啪啪免费视频网站| 欧美精品亚洲一区二区在线播放| 国产精品999视频| 亚洲黄色在线观看| 爱情岛论坛vip永久入口| 亚洲色图欧美在线| 亚洲国产精品日韩专区av有中文| 大地资源二中文在线影视观看| 精品久久在线观看| 国产成人av电影| 国产精品美女久久久久av超清| 91色在线观看| 激情五月开心婷婷| 奇米777四色影视在线看| 国产一区视频免费观看| 亚洲一区二区高清视频| 欧美jizzhd欧美| 久久久久久久蜜桃| 玩弄中年熟妇正在播放| 亚洲天堂av女优| 国产日韩三级| free性欧美1819hd| 男女激情免费视频| 亚洲精品久久久蜜桃| 欧洲精品视频在线观看| 久久久国产精品亚洲一区| 国产精品av在线播放| 不卡一区2区| 免费不卡av| 欧美日韩国产精品一区二区三区| 激情文学综合插| 久久精品老司机| 九色视频网址| av资源网在线观看| 97在线视频精品| 456成人影院在线观看| 91精品国产乱码久久久久久| 亚洲妇熟xx妇色黄蜜桃| 亚洲色图 校园春色| 欧亚在线中文字幕免费| 国产精品77777竹菊影视小说| 又粗又大的机巴好爽欧美| 青青草97国产精品麻豆| 久久精品男女| 日本黄色免费观看| 久久激情久久| 精品一二三四| 男人天堂中文字幕| 色爱精品视频一区| 欧美最近摘花xxxx摘花| 蜜桃视频在线观看网站| 成人欧美精品久久久久影院| 国产精品丝袜白浆摸在线| 精品人妻无码中文字幕18禁| 五月天色婷婷综合| 日韩情涩欧美日韩视频| 黄页网站在线播放| 中文字幕久精品免费视频| 欧美大片va欧美在线播放| 国产精品久久久久久久久久久久久| 亚洲第一成年人网站| chinese偷拍一区二区三区| 99久久婷婷国产综合精品电影| 欧美日韩视频在线播放| 欧美成人第一页| 黄色三及免费看| 2019男人天堂| 亚洲狠狠婷婷综合久久久| 国产精品灌醉下药二区| 国模一区二区三区| 日韩国产欧美精品一区二区三区| 亚洲v日韩v综合v精品v| 在线一二三区| 久久免费精品日本久久中文字幕| 最新一本之道波多野结衣| 一本之道在线视频| 免费影视观看网站入口| 免费在线看污| 国产99久久久欧美黑人| 给我免费播放片在线观看| 国产成人精品亚洲| 少妇视频一区| 亚洲天堂久久新| 欧美大片在线观看一区| 亚洲一区二区免费| 日本久久亚洲电影| eeuss鲁片一区二区三区在线观看| 美美哒免费高清在线观看视频一区二区| 午夜伦理一区二区| 黄色免费影视| 亚洲一区二区三区精品动漫| 99视频在线观看一区三区| 韩国自拍一区| 久久久久久99久久久精品网站| 男人皇宫亚洲男人2020| 97成人超碰免| 亚州欧美一区三区三区在线| 91精品国产乱码久久久张津瑜| 亚洲天堂网站在线观看视频| 国产精欧美一区二区三区白种人| 激情欧美丁香| 欧美黄片一区二区三区| 九色视频在线观看| 搞黄在线观看| 国产精品久久久久久久久久久久久| 瑟瑟在线观看| 成人网中文字幕| 欧美一区二区人人喊爽| 亚洲欧美日韩国产综合| 91丨九色丨蝌蚪丨老板| 超碰caoporn久久| 国产免费黄网站| 亚洲专区一区二区三区| 久久亚洲国产精品尤物| 亚洲第一中文av| 欧美性生活一区| 国产高清在线一区二区| 秋霞欧美一区二区三区视频免费| 欧美日韩国产成人高清视频| 国产精品欧美极品| 男生和女生一起差差差视频| 国产三级电影| 日韩在线综合| 欧美人与z0zoxxxx特| 欧美成人免费视频a| 日韩精品在线免费观看视频| 日本美女一区二区| aaa毛片在线观看| 人人妻人人澡人人爽精品欧美一区| 天天看天天摸天天操| 精品深夜av无码一区二区老年| 老司机午夜免费福利| 久久精品国产99国产精品| 小向美奈子av| 亚洲成熟少妇视频在线观看| 性欧美丰满熟妇xxxx性仙踪林| 国产乱码精品一区二区三区中文| 国产精品jk白丝蜜臀av小说| 黄色网址免费在线观看| 四虎影音在线| 99精品热视频| 99视频资源网| 亚洲美女在线看| 国产偷国产偷精品高清尤物| 亚洲成人av一区二区三区| 99re8这里有精品热视频免费| 精品国精品国产自在久不卡| 国产精品亚洲综合天堂夜夜| 一区二区三区四区中文字幕| 一本久久综合亚洲鲁鲁| 99er精品视频| 爱看av在线入口| 成人h动漫精品| 比比资源先锋| 老司机免费视频一区二区| 老司机精品视频导航| 97热精品视频官网| 亚洲午夜无码av毛片久久| h网站在线观看| 综合色一区二区| 香蕉视频在线播放| 欧美理论片在线播放| 日韩成人高清| 日韩女优在线视频| 亚洲精品乱码久久久久久久| 99精品久久久久久| 91在线视频在线| 免费男同深夜夜行网站| 日韩在线激情| 欧美私模裸体表演在线观看| 久久久久久久久免费| 性色一区二区| 2019国产精品| 国产精品有限公司| 日本免费一区视频| 在线观看日韩一区二区| 永久免费精品影视网站| 黄色av网站免费观看| 精品日产免费二区日产免费二区| 九九精品视频在线| 亚洲专区国产精品| 一级片手机在线观看| 偷拍亚洲色图| 国产日韩欧美在线观看视频| 国产成人一区二区三区免费看| 久久久久久久香蕉网| 精品日韩一区二区三区| 国产 中文 字幕 日韩 在线| 最近中文字幕一区二区| 日韩一区二区三区色| 久久精品女同亚洲女同13| 亚洲欧洲日产国码二区| 不卡的在线视频| 日韩有码视频在线| 日韩伦理福利| 黄色av网站免费观看| 亚洲a一区二区三区| 亚洲成人激情综合网| 男女激情无遮挡| 自拍偷拍中文字幕| 久久久久中文| 精品日本美女福利在线观看| 性史性dvd影片农村毛片| 精品少妇3p| 欧美一级艳片视频免费观看| 91精品一区二区三区综合| 亚洲精品在线a| 午夜精品美女自拍福到在线| 国产福利三区| 五月天色婷婷丁香| 亚洲最大成人av| 欧美性受xxxx黑人xyx| 亚洲成av人片一区二区梦乃| 成年人深夜福利| 亚洲激情五月| 亚洲视频一区在线| 欧美一区二区视频在线播放| 日韩欧美激情电影| 在线毛片观看| 久久av导航| 91视频成人| 精品久久福利| 亚洲污视频在线观看| www.国产在线| 日本视频在线免费| 妖精视频一区二区三区免费观看| 欧美精品日韩一区| 末成年女av片一区二区下载| 亚洲一区免费| 日产国产高清一区二区三区| 国产日韩欧美日韩| 日本va欧美va精品发布| 久草在线免费资源| 美女把尿口扒开让男人桶在线观看| 久草福利资源站| 精品99在线视频| 91丨国产丨九色丨pron| 中文字幕在线永久| 国模私拍视频在线观看| 无码小电影在线观看网站免费| 亚洲手机成人高清视频| 欧美性猛交xxxx免费看| 99精品视频在线观看免费| 91午夜精品亚洲一区二区三区| 亚洲毛片av在线| 无码成人精品区在线观看| 亚洲无码久久久久| 国产美女娇喘av呻吟久久| 国产女人伦码一区二区三区不卡| 岛国一区二区在线观看| 成人国产精品免费网站| 俺来俺也去www色在线观看| 德国极品另类| 97av视频在线观看| 国产wwwxx| 色呦呦在线看| 免费在线小视频| 成年网站免费视频黄| 日本在线一区二区三区| 亚洲国产成人久久| 日韩精品一区二区三区在线播放| 91网站在线观看免费| 黄色av免费网站| 国产成人精品毛片| 国产精品入口麻豆原神| 亚洲黄色一区二区| 伊人久久大香线蕉av超碰演员| aaa一区二区| 永久免费看片直接| 国产九九在线观看| 国产一区二区三区站长工具| www视频在线观看| 亚洲天堂日韩av| 无码人妻av免费一区二区三区| 91精品国产乱码久久久久久| 国产区在线视频| 91九色在线免费视频| 在线成人综合色一区| 欧美黑人猛交| 日韩免费中文字幕| 一级片免费观看视频| 国风产精品一区二区| 99国产精品久久久久久| 欧美日韩国产成人| jizz大全欧美jizzcom|