青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

統(tǒng)計

  • 隨筆 - 50
  • 文章 - 42
  • 評論 - 147
  • 引用 - 0

留言簿(6)

隨筆分類

文章分類

Link

搜索

  •  

積分與排名

  • 積分 - 167061
  • 排名 - 159

最新評論

閱讀排行榜

評論排行榜

perl 入門指引
題記:把這篇文章發(fā)到c++專區(qū),沒有嘩眾取寵的意思,這里我想套用阿里巴巴一個資深CTO的話:程序員的知識結(jié)構(gòu)應(yīng)該是T形的,要精通一到兩門編程語言作為主干,而在頂端則是要多種語言結(jié)合使用,也就是我們常說的深度和廣度,那么為什么要學(xué)習(xí)Perl,我相信有過Perl經(jīng)驗的程序員一定會對這種腳本語言語義的豐富和強大的字符處理能力有深刻的印象。的確,對于習(xí)慣了靜態(tài)語言的我們,Perl是個全新的世界,沒有變量聲明,沒有main函數(shù),比起c++, 我覺得perl更向是一個不羈的頑童,perl的語法中充滿了freedom的思想

假設(shè)有以下一個任務(wù),編一個函數(shù)將一個文件中所有在尖括號中間的字符由小寫轉(zhuǎn)換為大寫,這個工作如果用c++來完成的話可能得費一番心思,來看看Perl的解決方案吧
 1#! perl -w
 2&replaceString($ARGV[0];);
 3
 4sub replaceString
 5{
 6    open FILE,"< $_[0]"
 7       or die "can' open file:$!";
 8    while(<FILE>)
 9    {
10       s/\w*(<[^>]+>)/\U$1/g;
11       print ;
12    }

13}

以上是perl的解決方案,第一句話是perl的調(diào)用語句,對于windows系統(tǒng)意義不大,第二句話是將讀入的第一個參數(shù)傳入子例程replaceString,數(shù)組ARGV用來存放命令行傳入的參數(shù),接下來就是子例程,其中的核心語句就是s/\w*(<[^>]+>)/\U$1/g;向天書一樣,不過如果你對正則表達(dá)式熟悉的,也可以看出一些門道來,這也正是perl語言的強大之處,對于正則表達(dá)式的原生支持

學(xué)習(xí)perl,首先要忘掉C++古板的作風(fēng):
1,這里沒有main函數(shù),perl不會生成所謂的可執(zhí)行文件,源文件就是可執(zhí)行文件,這句話是說給沒有腳本經(jīng)驗的朋友們的聽的,解釋型語言編譯之后走哪算哪,沒有所謂的入口。
2.perl中常用的只有3種常量類型,標(biāo)量、數(shù)組和散列
   標(biāo)量包括常用的字符串,數(shù)字,類型是不確定的,perl會根據(jù)你的上下文情景做“自然的”轉(zhuǎn)換,聲明標(biāo)量使用$前綴
   例如你可以寫出以下語句,輕松得到結(jié)果
   $num1=5;
   $num2=5**2;
   print "the square of $num1 is $num2";
   (結(jié)果你可以自己試試看)
   而數(shù)組則是perl另一個靈活強大的類型,聲明數(shù)組使用@前綴,還是以一個例子說明吧
1#! perl -w
2   $sentence = "I love c++ and perl";
3   @words = split " ",$sentence;
4   print "the sentence \"@words\" has ".@words." words\n";
   輸出是the sentence "I love c++ and perl" has 5 words,是的,你也許意識到,perl自動根據(jù)你需要做了轉(zhuǎn)換,這部分涉及標(biāo)量上下文和列表上下文(超出本文討論范圍,有興趣可以深入研究),是perl的一個重要特性。然而perl 數(shù)組還有許多強大特性,例如,將以上例子稍作修改如下:
1#! perl -w
2   $sentence = "I love c++ and perl";
3   @words = split " ",$sentence;
4   @words = @words[0,1,4];
5   print "the sentence \"@words\" has ".@words." words\n";
   有興趣的朋友可以試試看結(jié)果

3, 函數(shù)參數(shù)列表的括號可加可不加,就像上面調(diào)用open函數(shù),正規(guī)寫法應(yīng)該是open(FILE,"$_[0]"),原因就在于perl覺得挪動兩根手指去輸入括號,是很費時的,而大多數(shù)情況下不加括號并不會引起歧義

4,函數(shù)的返回值為默認(rèn)的最后一個表達(dá)式的值,請注意,perl的函數(shù)沒有void的類型,任何函數(shù)都有返回值,且不用你去費事的寫return,而return在perl中又叫“多余的7個字母”

5,子例程參數(shù)列表 @_的使用,你也許會對第一個例子中的子例程replaceString有的意外,沒有參數(shù)列表,是的,perl的子例程沒有參數(shù)列表,不去規(guī)定每個函數(shù)可以接受什么參數(shù),多少個參數(shù),所有傳入的參數(shù)都會在函數(shù)調(diào)用的時候自動存入@_這個特殊數(shù)組(諸如此類的特殊符號perl中還有許多),而數(shù)組的第一個元素可以像這樣應(yīng)用$_[0],第二個$_[1]...依次類推,所以,我可以將第一個例程稍作修改,使他可以適用于更多的輸入?yún)?shù),達(dá)到一次處理多個文件的效果
 1&replaceString(@ARGV);
 2
 3sub replaceString
 4{
 5    foreach $id (0..@_-1)
 6    {
 7        open FILE,"< $_[$id]"
 8            or die "can' open file $_[$id]:$!";
 9        while(<FILE>)
10        {
11           s/\w*(<[^>]+>)/\U$1/g;
12           print ;
13        }
        
14        close FILE;
15    }

16}
6,以上的例子還可以進(jìn)一步簡化
 1&replaceString(@ARGV);
 2
 3sub replaceString
 4{
 5    foreach (@_)
 6    {
 7        open FILE,"< $_"
 8            or die "can' open file $_[$id]:$!";
 9        while(<FILE>)
10        {
11           s/\w*(<[^>]+>)/\U$1/g;
12           print ;
13        }
        
14        close FILE;
15    }

16}
注意第5行和第7行的變化,出現(xiàn)了一個新的面孔$_,它成為默認(rèn)變量,那它默認(rèn)指代誰呢?在循環(huán)語句中,它默認(rèn)指代循環(huán)變量,注意到foreach中省略了他原有的循環(huán)變量$id,那這時$_就指向了它,也許你會覺得這回令程序產(chǎn)生歧義,其實這些擔(dān)心是多余的,事實上它在perl中很好用,可以使寫出來的程序簡潔優(yōu)美,perl中還有許多諸如此類的變量:
$_   默認(rèn)變量,多用于循環(huán)語句指代循環(huán)變量
$!   錯誤信息包含變量,當(dāng)調(diào)用系統(tǒng)API出錯的時候,系統(tǒng)的錯誤信息會自動寫入這個變量
$`    正則表達(dá)式匹配前置變量
$&   正則表達(dá)式匹配變量
$'  正則表達(dá)式匹配后置變量
$1,$2,$3...   正則表達(dá)式匹配臨時變量
前面兩個我們已經(jīng)見過了,后面四個都是關(guān)于正則表達(dá)式的,還是以一個例子說明吧
#! perl -
use strict;
sub readMappingFile
{
    my ($fileName)
=@_;
    my 
%mapping;
    open MAPFILE,
"< $fileName"
        or die 
"can't open file $fileName:$!";
    
while(<MAPFILE>)
    
{
        chomp;
        
if(/^(\w+)\s+/)
        
{
            $mapping
{$1}=$';
        }

    }
    
    
%mapping;
}

no strict;
print $ARGV[
0]." is open\n";
%mapping=readMappingFile $ARGV[0];
while(($key,$value)= each %mapping)
{
    print 
"$key=>$value\n"
}

這個例子需要傳入一個命令行參數(shù),該參數(shù)是個文本文件的文件名,程序?qū)⒆x入文本文件的內(nèi)容,將它存入散列%mapping中(以%為前綴的變量聲明未散列,相當(dāng)于C++ STL中的map類型),最后將其打印出來
例如:文本內(nèi)容為:
1         cnblog
2    cppblog
csdb    http:
//blog.csdn.net/dawnbreak/
cppblog    http://m.shnenglu.com/dawnbreak/    
將會輸出:
1.txt is open
1=>cnblog
cppblog
=>http://m.shnenglu.com/dawnbreak/
2=>cppblog
csdb
=>http://blog.csdn.net/dawnbreak/
注意到各行每兩個健值之間的空格或制表符并不一樣,但是輸出格式確是一致

這篇文章前前后后寫了很長時間,決定還是先發(fā)出來,慢慢更新

posted on 2009-01-14 21:30 pear_li 閱讀(2091) 評論(9)  編輯 收藏 引用 所屬分類: perl

評論

# re: perl 入門指引 2009-01-14 21:43 LOGOS

perl的作為腳本語言來說,詞法挺糟糕的,不同的重的變量要用$%@&做區(qū)分;
容器的填充樣式也有(){}[]多種規(guī)定
相比lua,變量只要給名字就可以了,容器的填充樣式只有一種{}
只有在lua缺少相應(yīng)的模塊的情況下,我才考慮perl,畢竟cpan上東西太多了
  回復(fù)  更多評論    

# re: perl 入門指引 2009-01-14 22:14 pear_li

@LOGOS
lua作為嵌入式腳本還不錯,效率較高,但是你說的cpan上東西太多,我想這是perl的優(yōu)點,一個lua不具備的優(yōu)點
至于說那些augly前綴,是很難記,但是我個人還是很喜歡諸如$_,等標(biāo)記,很靈活
  回復(fù)  更多評論    

# re: perl 入門指引 2009-01-15 09:28 pigvpig

lua應(yīng)用于效率要求高的工程,比如:游戲
perl應(yīng)用于Web開發(fā),庫非常強大
  回復(fù)  更多評論    

# re: perl 入門指引 2009-01-15 09:43 zuhd

準(zhǔn)備學(xué)習(xí)lua
  回復(fù)  更多評論    

# re: perl 入門指引 2009-01-15 14:05 

你如果不懂perl,看到$@%會比較頭痛,就好像美國人看到日語一樣;但是對于懂perl的人,$%@都是非常清晰的數(shù)據(jù)類型,不會混淆。
  回復(fù)  更多評論    

# re: perl 入門指引 2009-01-15 21:08 pear_li

@吖
同意
  回復(fù)  更多評論    

# re: perl 入門指引 2009-01-15 21:09 pear_li

@zuhd
也好,其實都是工具而已,不過建議還是多嘗試幾種,你可以去google一下python,沒準(zhǔn)你又會改主意,呵呵
  回復(fù)  更多評論    

# re: perl 入門指引 2009-01-16 17:08 guest

perl需要比較多的時間去適應(yīng),當(dāng)然現(xiàn)在腳本可選的很多了,perl要跟進(jìn)啊。。呵呵。。
  回復(fù)  更多評論    

# re: perl 入門指引 2009-01-17 16:36 haskell

支持,繼續(xù)
  回復(fù)  更多評論    

只有注冊用戶登錄后才能發(fā)表評論。
相關(guān)文章:
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            男人天堂欧美日韩| 99在线精品观看| 久久久夜夜夜| 欧美在线看片a免费观看| 欧美一区二区三区四区在线观看地址 | 一本久久综合亚洲鲁鲁| 亚洲国产另类久久精品| 免费成人黄色片| 亚洲韩国精品一区| 亚洲视频第一页| 性18欧美另类| 欧美国产日韩a欧美在线观看| 欧美日韩福利视频| 国产日韩精品一区观看| 亚洲国产高清视频| 一区二区三区视频在线看| 亚洲综合电影| 久久午夜影视| 91久久精品国产91性色tv| 一二三区精品| 美女视频黄a大片欧美| 欧美久久99| 国产日韩在线一区| 亚洲开发第一视频在线播放| 亚洲欧美国产va在线影院| 久久午夜色播影院免费高清| 91久久久亚洲精品| 欧美中在线观看| 欧美日韩中文| 亚洲欧洲综合另类在线| 亚洲女人天堂成人av在线| 久热国产精品| 亚洲一区精品电影| 欧美日韩国产综合久久| 悠悠资源网久久精品| 小黄鸭精品密入口导航| 91久久国产精品91久久性色| 欧美在线免费视频| 国产精品免费视频xxxx| 91久久精品日日躁夜夜躁国产| 亚洲一区区二区| 亚洲国产一区二区在线| 久久中文字幕一区二区三区| 国产欧美综合一区二区三区| 亚洲一区欧美| 一本在线高清不卡dvd| 欧美成人午夜激情在线| 在线观看成人一级片| 久久er99精品| 午夜在线视频观看日韩17c| 欧美日韩在线观看一区二区| 亚洲人成7777| 亚洲国产精品第一区二区三区| 久久成人资源| 国产午夜精品美女毛片视频| 欧美亚洲综合久久| 亚洲欧美国产77777| 国产精品永久入口久久久| 亚洲欧美制服另类日韩| 亚洲美女毛片| 欧美日韩国产不卡| 欧美小视频在线观看| 亚洲激情婷婷| 亚洲激情国产| 欧美日本在线看| 在线一区二区三区做爰视频网站| 欧美国产日韩一二三区| 免费视频一区二区三区在线观看| 亚洲国产精品视频一区| 亚洲国产女人aaa毛片在线| 欧美激情视频一区二区三区免费| 亚洲国产高潮在线观看| 亚洲电影欧美电影有声小说| 欧美成人激情视频免费观看| 亚洲精品一区二区三区福利| 亚洲人成在线播放| 欧美日韩视频一区二区| 亚洲一区二区三区四区五区黄| 亚洲一区日本| 一区二区三区自拍| 欧美高清hd18日本| 欧美日韩情趣电影| 久久不射中文字幕| 免费观看日韩| 亚洲一品av免费观看| 亚洲欧美成人网| 在线日韩av片| 在线一区欧美| 在线观看日韩一区| 亚洲看片一区| 狠狠色噜噜狠狠色综合久| 亚洲高清电影| 国产欧美日韩精品一区| 欧美成人午夜剧场免费观看| 欧美激情综合色综合啪啪| 亚洲欧美中日韩| 久久精品女人| 一区二区激情| 欧美影院成人| 亚洲午夜激情免费视频| 欧美在线播放视频| 亚洲久久一区| 久久久精品国产一区二区三区| 一本一本a久久| 久久精品国产v日韩v亚洲| 亚洲精品乱码久久久久久蜜桃91| 亚洲一二区在线| 亚洲精品小视频在线观看| 亚洲一区免费看| 99精品国产高清一区二区| 欧美一级理论片| 男女激情久久| 欧美在线www| 欧美日韩免费观看一区=区三区| 久久亚洲精品一区二区| 国产精品国产三级国产普通话99| 欧美成人在线免费观看| 国产日韩视频| 亚洲永久免费观看| 一区二区三区四区五区在线| 久久九九有精品国产23| 久久精精品视频| 国产精品嫩草影院av蜜臀| 亚洲国产天堂久久综合| 亚洲国产日韩欧美在线图片| 久久久免费精品视频| 国内揄拍国内精品久久| 亚洲午夜激情网站| 一区二区三区高清视频在线观看| 久久久夜精品| 你懂的视频一区二区| 国产一区二区三区四区三区四| 一本大道久久a久久综合婷婷| 亚洲日本欧美日韩高观看| 久久视频国产精品免费视频在线| 久久aⅴ国产欧美74aaa| 国产日韩视频| 亚洲综合二区| 欧美在线观看日本一区| 国产嫩草影院久久久久| 亚洲桃花岛网站| 午夜在线精品| 国产一区二区三区免费观看| 午夜精品免费| 久久综合狠狠综合久久综青草 | 午夜精品久久久久久久久久久久 | 欧美日韩一区在线播放| 91久久精品网| 亚洲天堂成人在线观看| 欧美另类变人与禽xxxxx| 亚洲精品一区二区三区婷婷月| 亚洲美女免费视频| 欧美午夜影院| 亚洲欧美在线免费| 美女91精品| 99av国产精品欲麻豆| 欧美亚洲成人精品| 香蕉久久精品日日躁夜夜躁| 久久久久久网站| 亚洲精品少妇30p| 亚洲天堂久久| 久久夜色精品国产噜噜av| 亚洲国产一区二区精品专区| 欧美日韩一二区| 欧美一级视频免费在线观看| 麻豆精品视频| 亚洲视频一区二区| 一区二区亚洲欧洲国产日韩| 欧美电影在线播放| 这里只有视频精品| 蜜桃av久久久亚洲精品| 亚洲午夜视频在线观看| 国产精品少妇自拍| 蜜桃精品一区二区三区 | 一区二区三区日韩精品| 久久男女视频| 日韩亚洲在线观看| 国产一区白浆| 欧美日韩国产免费| 欧美在线91| 亚洲天堂成人在线观看| 欧美不卡视频| 欧美在线视频播放| 9色国产精品| 亚洲成人在线视频播放| 国产精品久久久久久久久久妞妞| 另类尿喷潮videofree| 亚洲网站在线| 日韩视频欧美视频| 欧美国产日韩免费| 久久久最新网址| 性欧美xxxx大乳国产app| 一区二区三区视频在线| 亚洲欧美网站| 亚洲美女免费视频| 亚洲成人在线视频播放 | 99日韩精品| 欧美成年人网| 久久精品99| 欧美诱惑福利视频|