第一篇:C程序員精通Perl
C程序員精通Perl
本書幫助有C和C++背景的程序員學(xué)習(xí)和使用Perl語言。
全書共17章,探討了Perl語言的所有知識(shí)要點(diǎn)。既包括C程序員所熟悉的變量、數(shù)據(jù)結(jié)構(gòu)、控制語句和子程序,又包括C中所沒有的報(bào)告編寫、文本表格操縱、CGI編程以及簡(jiǎn)單數(shù)據(jù)庫接口,還講述了如何充分利用CPAN庫中廣泛的Perl模塊庫。
本書可作為C和C++程序員學(xué)習(xí)Perl編程的參考書。對(duì)于Perl語言的初學(xué)者,本書可以幫助他們了解C和Perl之間可比較、可結(jié)合特性。
第二篇:程序員之路──如何學(xué)習(xí)C語言并精通C語言
程序員之路──如何學(xué)習(xí)C語言
學(xué)習(xí)C語言不是一朝一夕的事情,但也不需要花費(fèi)十年時(shí)間才能精通。如何以最小的代價(jià)學(xué)習(xí)并精通C語言是本文的主題。請(qǐng)注意,即使是“最小的代價(jià)”,也絕不是什么捷徑,而是以最短的時(shí)間取得最多的收獲,同時(shí)也意味著你需要經(jīng)歷艱苦的過程。
一、要讀就讀好書,否則不如不讀
所有初學(xué)者面臨的第一個(gè)問題便是:如何選擇教材。好的開始是成功的一半,選擇一本優(yōu)秀的教材是事半功倍的關(guān)鍵因素。不幸的是,學(xué)校通常會(huì)幫你指定一本很差勁的C語言課本;而幸運(yùn)的是,你還可以再次選擇。
大名鼎鼎的譚浩強(qiáng)教授出了一本《C語言程序設(shè)計(jì)》,據(jù)說發(fā)行量有超過400萬,據(jù)我所知,很多學(xué)校都會(huì)推薦這本書作為C語言課本。雖然本人的名字(譚浩宇)跟教授僅僅一字之差,但我是無比堅(jiān)定地黑他這本書的。這本書不是寫給計(jì)算機(jī)專業(yè)的學(xué)生的,而是給那些需要考計(jì)算機(jī)等級(jí)考試的其它專業(yè)學(xué)生看的。這本書的主要缺點(diǎn)是:例子程序非常不專業(yè),不能教給你程序設(shè)計(jì)應(yīng)該掌握的思考方式;程序風(fēng)格相當(dāng)?shù)夭缓茫瑫?huì)讓你養(yǎng)成亂寫代碼的惡習(xí);錯(cuò)誤太多,曾經(jīng)有人指出過這本書的上百個(gè)錯(cuò)誤,其中不乏關(guān)鍵的概念性錯(cuò)誤。好了,這本書我也不想說太多了,有興趣大家可以百度一下:)
Kernighan和Ritchie的《The C Programming Language》(中譯名《C程序設(shè)計(jì)語言》)堪稱經(jīng)典中的經(jīng)典,不過舊版的很多內(nèi)容都已過時(shí),和現(xiàn)在的標(biāo)準(zhǔn)C語言相去甚遠(yuǎn),大家一定要看最新的版本,否則不如不看。另外,即使是最經(jīng)典最權(quán)威的書,也沒有辦法面面俱到,所以手邊常備一本《C語言參考手冊(cè)》是十分必要的?!禖語言參考手冊(cè)》就是《C Reference Manual》,是C語言標(biāo)準(zhǔn)的詳細(xì)描述,包括絕大多數(shù)C標(biāo)準(zhǔn)庫函數(shù)的細(xì)節(jié),算得上是最好的標(biāo)準(zhǔn)C語言的工具書。順便提一句,最新的《C程序設(shè)計(jì)語言》是根據(jù)C89標(biāo)準(zhǔn)修訂的,而《C語言參考手冊(cè)》描述的是C99標(biāo)準(zhǔn),二者可能會(huì)有些出入,建議按照C99標(biāo)準(zhǔn)學(xué)習(xí)。還有一本《C和指針》,寫得也是相當(dāng)?shù)夭诲e(cuò),英文名是《Pointers on C》,特別地強(qiáng)調(diào)指針的重要性,算是本書的一個(gè)特點(diǎn)吧。不過這本書并不十分適合初學(xué)者,如果你曾經(jīng)學(xué)過C語言,有那么一些C語言的基礎(chǔ)但又不是很扎實(shí),那么你可以嘗試一下這本書。我相信,只要你理解了指針,C語言便不再神秘。
如果你已經(jīng)啃完了一本C語言教材,想要更進(jìn)一步,那么有兩本書你一定要看。首先是《C Traps and Pitfalls》(中譯名《C陷井與缺陷》),很薄的一本小冊(cè)子,內(nèi)容非常非常地有趣。要注意一點(diǎn),這本書是二十多年前寫成的,里面提到的很多C語言的缺陷都已被改進(jìn),不過能夠了解一些歷史也不是什么壞事。然后你可以挑戰(zhàn)一下《Expert C Programming》(中譯名《C專家編程》),書如其名,這本書頗具難度,一旦你仔細(xì)讀完并能透徹理解,你便可以放心大膽地在簡(jiǎn)歷上寫“精通C語言”了。
切記一個(gè)原則,不要讀自己目前還看不懂的書,那是浪費(fèi)生命。如果你看不懂,那你一定是缺失了某些必需基礎(chǔ)知識(shí)。此時(shí),你要仔細(xì)分析自己需要補(bǔ)充哪些內(nèi)容,然后再去書店尋找講述的這些內(nèi)容的書籍。把基礎(chǔ)知識(shí)補(bǔ)充完畢再回頭來學(xué)習(xí),才會(huì)真正的事半功倍。
二、Unix/Linux還是Windows,這是個(gè)很大的問題
不同的編程環(huán)境會(huì)造就出不同思維的程序員。Windows的程序員大多依賴集成開發(fā)環(huán)境,比如Visual Studio,而Unix程序員更加鐘愛Makefile與控制臺(tái)。顯而易見,集成開發(fā)環(huán)境更容易上手,在Windows上學(xué)習(xí)C語言,只需要會(huì)按幾個(gè)基本的Visutal C++工具欄按鈕就可以開始寫Hello, World!了,而在Unix下,你需要一些控制臺(tái)操作的基本知識(shí)。有人也許認(rèn)為Unix的環(huán)境更簡(jiǎn)潔,但習(xí)慣的力量是很大的,大家都很熟悉Windows的基本操作,而為了學(xué)習(xí)C語言去專門裝一個(gè)Unix系統(tǒng),似乎有點(diǎn)不劃算。
對(duì)于一個(gè)只懂得Windows基本操作、連DOS是什么都不知道的新手而言,盡快做一些有趣而有意義的事情才是最重要的。用C語言寫一個(gè)小程序遠(yuǎn)比學(xué)習(xí)ls、cat等命令有趣,況且我們要專注于C語言本身,就不得不暫時(shí)忽略一些東西,比如編譯鏈接的過程、Makefile的寫法等等等等。
所以我建議初學(xué)者應(yīng)該以Visual C++ 6.0(不是VisualC++.NET)或者Dev C++作為主要的學(xué)習(xí)環(huán)境,而且千萬不要在IDE的使用技巧上過多糾纏,因?yàn)榻窈竽阋欢ㄒD(zhuǎn)向Unix環(huán)境的。Visual C++ 6.0使用很方便,調(diào)試也很直觀,但其默認(rèn)的編譯器對(duì)C標(biāo)準(zhǔn)的支持并不好,而Dev C++使用gcc編譯器,對(duì)C99的標(biāo)準(zhǔn)都支持良好。使用順帶提一下,很多大學(xué)的C語言課程還在使用Turbo C 2.0作為實(shí)驗(yàn)環(huán)境,這是相當(dāng)不可取的,原因其一是TC 2.0對(duì)C標(biāo)準(zhǔn)幾乎沒有支持,其二是TC 2.0編譯得到的程序是16位的,這對(duì)今后理解32位的程序會(huì)造成極大的困擾(當(dāng)然,用djgpp之類的東西可以使TC 2.0編譯出32位程序,不過那過于復(fù)雜了)。
等你學(xué)完一本C語言的教材,你一定要轉(zhuǎn)向Unix平臺(tái)繼續(xù)學(xué)習(xí),幾乎所有的C語言高級(jí)教程都是基于Unix平臺(tái)的(比如《C專家編程》)。轉(zhuǎn)變的過程是痛苦的,你需要面對(duì)的是各種紛繁復(fù)雜的命令,完全不同于Windows平臺(tái)的思考方式,但是這種痛苦是值得的。Unix與C是共生的,Unix的思考方式和習(xí)慣更加符合C語言的思考方式和習(xí)慣。在Unix下,你可以找到無數(shù)優(yōu)秀的源代碼供你盡情閱讀,你可以方便地查看某個(gè)庫函數(shù)的聯(lián)機(jī)手冊(cè),還可以看到最優(yōu)秀的代碼風(fēng)格
歸結(jié)起來就是一句話:初學(xué)C語言,建議使用Windows系統(tǒng)和集成開發(fā)環(huán)境,在準(zhǔn)備向“高手”方向努力時(shí),請(qǐng)先轉(zhuǎn)向Unix平臺(tái)。
三、萬事俱備,你就是東風(fēng)
書已選定,環(huán)境配置完成,正所謂萬事俱備,只欠你自己的努力了。請(qǐng)從書的前言開始,仔細(xì)地閱讀手頭的教材,很多人看書喜歡直接從第一章開始看,這是錯(cuò)誤的做法。前言是作者對(duì)整本書的大體介紹,作者一般會(huì)告訴你需要什么基礎(chǔ)才能夠順利閱讀本書,這可以幫助你檢驗(yàn)自己的基礎(chǔ)知識(shí)是否已經(jīng)具備??赐昵把?,還要瀏覽一下目錄,了解一下書的整體結(jié)構(gòu),順便給自己安排一下學(xué)習(xí)計(jì)劃。
學(xué)習(xí)C語言,必需注意每一個(gè)細(xì)節(jié),書上的例子代碼一定要自己親自敲一遍,編譯執(zhí)行輸出都跟書上說的一致才能算是學(xué)完了一個(gè)例子,如果不一致,就要仔細(xì)找原因。出了書本上有的例子,自己還要“創(chuàng)造”一些例子,比如學(xué)習(xí)運(yùn)算符優(yōu)先級(jí)的時(shí)候,可以寫幾個(gè)相同的表達(dá)式,在不同的位置加上括號(hào),看看有哪些不同的行為,比如*p++和(*p)++,又比如a = b == c、(a = b)== c和a =(b == c)等等。自己抄的書上的例子以及改造之后的例子,還有自己“創(chuàng)造”的例子,都應(yīng)該仔細(xì)地歸類保存,并且要在源代碼中寫上簡(jiǎn)短的注釋,闡述這個(gè)例子的意圖。
例子之后就是習(xí)題了,我建議初學(xué)者把所有的習(xí)題都獨(dú)立做一遍,然后對(duì)照答案的代碼,看看自己的代碼有那些不足,再試著修改自己的代碼。很多人不重視習(xí)題,這是極大的錯(cuò)誤,因?yàn)樽髡咄ǔ?huì)在習(xí)題中說明一些重要的道理,而不是單純地檢驗(yàn)前面的知識(shí)。
也許你認(rèn)為這樣學(xué)習(xí)太慢,其實(shí)不然。學(xué)得細(xì)致就不用走回頭路,等你學(xué)到后面才發(fā)現(xiàn)自己前面沒搞清楚,那才是真的得不償失。一般說來,整本書讀完,你應(yīng)該完成數(shù)千行乃至上萬行的代碼,無論是原封不動(dòng)照抄書上的,還是自己心血來潮寫就的,都是今后繼續(xù)學(xué)習(xí)的一筆財(cái)富。以我自己舉例,閱讀《Windows核心編程》時(shí)(我只閱讀了3/4的內(nèi)容),除了抄書上的代碼,還自己寫了很多例子,一共有5574行(用unix下的wc工具統(tǒng)計(jì)),時(shí)隔多日,我早已記不清Windows的系統(tǒng)編程了,但只要花幾分鐘翻出以前的代碼看看,便會(huì)重新了然于胸。所謂好記性不如爛筆頭,就是這個(gè)道理。
仔細(xì)讀書、認(rèn)真抄寫源代碼、獨(dú)立完成習(xí)題外加更進(jìn)一步的實(shí)驗(yàn),最后將所有的代碼留下,成為自己的經(jīng)驗(yàn)和財(cái)富,絕對(duì)的辛苦,也絕對(duì)的事半功倍。當(dāng)然,這種方式只適合學(xué)習(xí)需要精通的技術(shù),如果不是學(xué)習(xí)C語言,你還要具體情況具體分析。
寫到最后,還有非常非常重要的一點(diǎn)沒有提及──代碼風(fēng)格,從最開始學(xué)習(xí)就必須強(qiáng)迫自己模仿最優(yōu)秀的代碼風(fēng)格。
第三篇:Perl軟件學(xué)習(xí)心得
Per l 不需要任何特別的文件名字或后綴名,但最好不要使用后綴名
在 Perl 中,注釋由# 開始,如果文本的第一行前兩個(gè)字符是“ #!”,接著的就是執(zhí)行下面文件的程序。#!行和程序的可移植性相關(guān),需要找到每臺(tái)機(jī)器的存放地點(diǎn)。幸運(yùn)的是,通常都被放在/usr/bin/perl或/usr/local/bin/perl中。
如果不是這樣,則需要找到你自己機(jī)器上perl的存放地點(diǎn),然后使用那個(gè)路徑。
Perl 中不需要聲明變量
Perl 內(nèi)部沒有整數(shù)值。程序中的整數(shù)被當(dāng)做等價(jià)的浮點(diǎn)數(shù)來處理.八進(jìn)制以 0 開頭,十六進(jìn)制以 0x 開頭,二進(jìn)制 0b 開頭。在十六進(jìn)制中 A 到 F(或者 a 到 f)分別表示 10 到 15.Perl 允許用下劃線來分隔61298040283768,因此可以像下面這樣書寫:61_298_040_283_768加(+),減(-),乘(*),除(/)模數(shù)運(yùn)算符(%)。10%3 的值是 10 除以 3 的余數(shù)。兩個(gè)操作數(shù)首先變成它們對(duì)應(yīng)的整數(shù)值,如 10.5%3.2 轉(zhuǎn)換為
10%3◆后再計(jì)算兩個(gè)*號(hào)表示,如 2**3,表示 2 的 3 次方.由小寫的字母 x 表示。這種操作能把操作符左邊字符串重復(fù)操作符右邊數(shù)字那么多次。
use warnings一直都需要警告(warning),可以在 #!這一行加上-w,如:#!/usr/bin/perl – w 當(dāng)程序中包含可能的錯(cuò)誤時(shí),可以要求 Perl 警告你
把 use diagnostics 加入程序后通過它可以看到更詳細(xì)的警告信息
標(biāo)量變量的名字由一個(gè)美圓符號(hào)($)后接 Perl 標(biāo)識(shí)符:由字母或下劃線開頭,后接字母,數(shù)字,或者下劃線。或者說由字母,數(shù)字和下劃線組成,但不能由數(shù)字開頭。大小寫是嚴(yán)格區(qū)分的。
每一個(gè)二元操作符都有一個(gè)等價(jià)的二元賦值形式:由這個(gè)符號(hào)后接等號(hào)組成。例如,下面兩行是等價(jià)的:
$fred = $fred + 5;# 沒有用二元賦值操作符 $fred+=5;#利用二元賦值操作符 下面的也是等價(jià)的: $barney = $barney*3;$barney*=3;上述兩例中,變量借助自身而非別的變量來改變自身的值。另一個(gè)常用的賦值操作符是字符串連接符號(hào)(.);其賦值形式為(.=): $str = str.“”;#$str后接空格 $str.=“”’;#同上
$mean = “ brontosaurus steak”;
$barney = “fred ate a $meal ”;#$barney 現(xiàn)在是“fred ate a brontosaurus steak” $barney = ‘fred ate a’.$meal;#同上
如果一個(gè)變量未被賦值,則將使用空值替換$barney = “fred ate a $meat ”;#$barney 現(xiàn)在是“fred ate a ”
在字符串中變量前($符號(hào)前)加上反斜線(),變量將不會(huì)被內(nèi)插(替換): $fred = ‘ hello’;
print “ The name is $fred.n”;#打印出美圓符號(hào),變量不會(huì)被其值替換 print ‘ The name is $fred’.“ n”;# 同上
花括號(hào)({})。用花括號(hào)將變量名括起來。或者將字符串分隔成幾個(gè)部分,再用連接符(.)串起來:
$what = “ brontosaurus steak ”;$n = 3;print “fred ate $n $whats.n”;# 不是 steaks,而是$whats的值 print “fred ate $n ${what}s.n”;# 現(xiàn)在是使用變量$what print “fred ate $n $what”.“ s.n”;#另一種方法
print ‘fred ate ’.$n.‘’.$what.“ s.n ”;#一種復(fù)雜的方法
35!= 30+5 #false 35 == 35.0 #true ‘35’eq‘ 35.0’ #false(按照字符串比較)‘fred’ lt ‘barney’ #false ‘fred’ lt ‘free’ #true ‘fred’ eq ‘fred’ #true ‘fred’ eq ‘Fred’ #false ‘’gt ‘’ #true
if($name gt ‘ fred’),print “ ‘ $name’ comes after ‘ fred ’ in sorted order.n”;}else{ print “ ‘ $name’ does not come after ‘ fred’.n”;print “ Maybe it’ s the same string, in fact.n”;}
$text = “ a line of textn”;#也可以由
chomp($text =
defined 函數(shù),它將在為undef時(shí)返回 false,其余返回 true $madonna =
小寫的字母 x 表示。這種操作能把操作符左邊字符串重復(fù)操作符右邊數(shù)字那么多次: “fred”x 3 # “fredfredfred” 例子2.5將給出換行的事例
數(shù)組下標(biāo)可以是任何能返回?cái)?shù)值的表達(dá)式。如果其值不為整數(shù),則自動(dòng)將其轉(zhuǎn)換為小于它的最大整數(shù)值:$number = 2.71828;print $fred[$number100]’;#得到‘ bedrock’ , 第 0 個(gè)元素 $rocks[-200] = ‘ crystal’;# 嚴(yán)重錯(cuò)誤(fatal error!)
數(shù)組是由括號(hào)括起來并且其元素由逗號(hào)分隔開的列表。(1,2,3)# 含有 1,2,3 的列表(1,2,3,)# 同上,最后一個(gè)逗號(hào)被忽略()# 空列表-0 個(gè)元素(1 ..100)# 包含 100 個(gè)整數(shù)的列表(1 ..5)#同(1,2,3,4,5)(1.7 .. 5 .7)#同上—最小值和最大值被轉(zhuǎn)換成整數(shù)(5 ..1)#空列表—..中的左值應(yīng)小于右值,否則為空(0,2 .. 6,10,12)#同(0,2,3,4,5,6,10,12)($m ..$n)# 由$m 和$n 的值決定(0 .. $#rocks)#上節(jié)中有$#rocks 的介紹 用qw表示數(shù)組: qw!fred barney betty wilmadino!qw# fred barney betty wilmadino # #有些像注釋 qw(fred barney betty wilmadino)qw{fred barney betty wilmadino } qw[fred barney betty wilmadino ] qw
@giant = 1..1e5;#包含 100,000 個(gè)元素的表
@stuff =(@giant, undef, @giant);#包含 200,001 個(gè)元素的表
@rocks = qw / bedrock slate lava /;@tiny =();#空表
@giant = 1..1e5;#包含 100,000 個(gè)元素的表
@stuff =(@giant, undef, @giant);#包含 200,001 個(gè)元素的表 @copy = @quarry;#將一個(gè)數(shù)組中的值拷貝的另一個(gè)數(shù)組中
pop 操作將數(shù)組的最后一個(gè)元素取出并返回: @array = 5..9;$fred = pop(@array);#$fred得到 9,@array 現(xiàn)在為(5,6,7,8)$barney = pop @array;#$barney gets 8, @array 現(xiàn)在為(5,6,7)pop @array;#@array 現(xiàn)在為(5,6)(7 被丟棄了)
pop 相反的操作是 push,它可以將一個(gè)元素(或者一列元素)加在數(shù)組的末尾: push(@array,0);#@array 現(xiàn)在為(5,6,0)push @array,8;#@array 現(xiàn)在為(5,6,0,8)push @array,1 ..10;#@array 現(xiàn)在多了 10 個(gè)元素 @others =qw/9 0 2 1 0 /;push @array,@others;#@array 現(xiàn)在又多了 5 個(gè)元素(共有 19 個(gè))push 的第一個(gè)參數(shù)或者 pop 的唯一參數(shù)必須是數(shù)組變量。
unshift和
shift 對(duì)一個(gè)數(shù)組的開頭進(jìn)行操作(數(shù)組的左端有最小下標(biāo)的元素)。下面是一些例子: @array = qw# dinofred barney #;$m = shift(@array);#$m 得到“dino” , @array 現(xiàn)在為(“fred” , “ barney”)$n = shift @array;#$n 得到”fred” , @array 現(xiàn)在為(“ barney”)shift @array;#@array 現(xiàn)在為空
$o = s hift @array;#$o 得到undef, @arry仍為空 unshift(@array,5);#@array 現(xiàn)在為(5)unshift @array,4;#@array 現(xiàn)在為(4,5)@others = 1..3;unshift @array, @others;#array 現(xiàn)在為(1,2,3,4,5)
@rocks = qw{flintstone slate rubble };print “ quartz @rocks limestone n ”;# 輸出為 5 種 rocks 由空格分開
$email = “ fred@bedrock.edu”;#錯(cuò)誤!將會(huì)替換@bedrock $email = “ fred@bedrock.edu”;#正確
$email = ‘ fred@bedrock.edu’;# 另一種方法
只有一個(gè)元素的數(shù)組的被其值替換的行為和你預(yù)期的類似: @fred = qw(hello dolly);$y = 2;$x = “ This is $fred*1+’ s place”;# “ This is dolly’ s place” $x = “ This is $fred[$y-1]’ s place”;# 同上
@fred = qw(eating rocks is wrong);$fred = “ right ”;#我們將打印“ this is right[3] ”
print “ this is $fred[3] n ”;#打印出“ wrong”使用 $fred[3] print “ this is ${fred}[3] n ”;# 打印出“ right”(由花括號(hào)分開)print “ this is $fred”.“ [3] n”;#正確(兩個(gè)字符串,右.分開)print “ this is $fred [3] n”;# 正確(利用反斜線轉(zhuǎn)義)
foreach從列表的第一個(gè)元素一直循環(huán)執(zhí)行到最后一個(gè)元素,一次迭代一個(gè):
foreach $rock(qw/ bedrock slate lava /){print “ One rock is $rock.n”;#打印出 3 種 rocks
reverse(逆轉(zhuǎn))操作將輸入的一串列表(可能是數(shù)組)按相反的順序返回 @fred = 6 ..10;@barney = reverse(@fred);# 得到 10,9,8,7,6 @wilma = reverse 6 .. 10;#同上,沒有使用額外的數(shù)組 @fred = reverse @fred;#將逆轉(zhuǎn)過的字符串存回去
sort 操作將輸入的一串列表(可能是數(shù)組)根據(jù)內(nèi)部的字符順序進(jìn)行排序 @rocks = qw/ bedrock slate rubble granite /;@sorted = sort(@rocks);#得到 bedrock, granite, rubble, slate @back = reverse sort @rocks;#為 slate 到 bedrock @rocks = sort @rocks;#將排序的值寫回@rocks @numbers = sort 97 .. 102;# 得到 100,101,102,97,98,99
標(biāo)量和列表上下文
+ something #something 必須是標(biāo)量 sort something #something 必須是列表
如果 something 是相同的字符串,在一種情況下,它返回一個(gè)變量值,在另一種情況下,它可能返回列表◆。Perl 中的表達(dá)式將根據(jù)其 context 返回適當(dāng)?shù)闹怠?/p>
在列表 context 中,它返回反轉(zhuǎn)的列表。在標(biāo)量 context 中,返回反轉(zhuǎn)的字符串(或者將反轉(zhuǎn)的結(jié)果串成一個(gè)字符串):
@backwards = reverse qw / yabbadabba doo /;# 返回 doo, dabba, yabba $backwards = reverse qw/ yabbadabba doo /;# 返回oodabbadabbay
函數(shù) scalar它不是一個(gè)真實(shí)的函數(shù)因?yàn)槠鋬H是告訴 Perl 提供一個(gè)標(biāo)量 context: @rocks = qw(talc quartz jade obsidian);print “ How many rocks do you have?n”;
print “ I have ” , @rocks, “rocks!n”;# 錯(cuò)誤,輸出 rocks 的名字 print “ I have ” , scalar @rocks, “ rocks!n ”;#正確,輸出其數(shù)字
@lines =
所有的 Perl 子程序都會(huì)返回值,在 Perl 中返回值和不返回值是沒有區(qū)別的。當(dāng) Perl 遍歷此子程序時(shí),將會(huì)計(jì)算每一步的值。此子程序中最后計(jì)算的值將被返回。最后一個(gè)被計(jì)算的表達(dá)式是 print 語句。其返回值通常為 1。用my創(chuàng)建私有變量。使用 my 創(chuàng)建新的,私有數(shù)組:my @phone_number。sub max { my($m,$n);#新的,私有變量($m,$n)= @_;#賦值 if($m > $n){$m} else{$n} } my($m,$n)= @_;
hash看作一堆數(shù)據(jù)(a barrel of data),每一個(gè)數(shù)據(jù)都有一個(gè)相應(yīng)的標(biāo)簽??梢酝ㄟ^標(biāo)簽(key)訪問此標(biāo)簽對(duì)應(yīng)的元素(value)$hash{$some_key} $family_name, “ fred”= “ rubble”;
$family_name{“fred” } = “astaire”;# 將新值賦給已經(jīng)存在的元素
$family_name{ “wilma” } = “flintstone”;#新增一個(gè) key(也包括 value)$family_name{ “ betty” }.= $family_name{“ barney ” };#創(chuàng)建一個(gè)新元素 $grantie = $family_name{“l(fā)arry” };#沒有l(wèi)arry:得到undef %some_hash =(“foo”, 35, “bar”, 12.4, 2.5, “hello”, “wilma”, 1.72e30, “betty”, “bye n”);@array_array = %some_hash;%new_hash = %old_hash;將%old_hash展開成 key/value 的列表,再將其賦給%new_hash,其將 key/value 對(duì)一個(gè)一個(gè)加入的。%inverse_hash = reverse %any_hash;
my %last_name =(“fred” => “flintstone”, “dino” =>undef,“barney”=> “rubble”;“betty”=> “rubble”,);上面代碼中,很容易辨別出哪一個(gè)是 key,哪一個(gè)是 value。注意列表中最后一個(gè)逗號(hào)
my %hash =(“a” =>1, “ b”=>2, “ c ”=>3);my @k = keys %hash;my @v = values %hash;
my $count = keys %hash;#得到 3,是指有 3 個(gè) key/value 對(duì)。
each 函數(shù),它將返回 key/value 對(duì)的2元素列表。一般只在 while 循環(huán)中使用 each: while(($key, $value)= each %hash){ print “ $key => $valuen”;
}while 循環(huán)的條件表達(dá)式,這是在標(biāo)量 context 中。列表賦值語句在標(biāo)量 context 中返回的是元素的個(gè)數(shù),在本例中,是2。
each 返回的 key/vlaue對(duì),順序是混亂的(它其順序和 keys 和 values 函數(shù)返回的順序相同)。如果想將其按序排放,可以對(duì)它們排序(使用 sort),大致如下: foreach $key(sort keys %hash){ $value =$hass{$key};print “ $key => $valuen”;
#也可以不使用額外的臨時(shí)變量$value #print “ $key => $hash,key-n”;}
exists 函數(shù),如果 hash 中存在此 key,則返回 true,這和 是否有對(duì)應(yīng)的 value 無關(guān): if(exists $books{$dino}){ print “ Hey, there’ s a libaray card for dino!n ”;}
delete 函數(shù)將某個(gè)給定的 key(包括其對(duì)應(yīng)的 value)從 hash 中刪除。(如果不存在這個(gè) key,則什么也不做;不會(huì)有警告或者錯(cuò)誤信息。)my $person = “ betty”;
delete $books{$person};#將$person 的借書卡刪除掉
在雙引號(hào)的字符串中使用單個(gè) hash 元素: foreach $person(sort keys %books){ if($books{$person}){ print “ $person has $books{$person} items n ” #fred有3個(gè) } }
正則表達(dá)式,在 Perl 中通常被稱為模式(pattern):某個(gè)模板是否匹配某個(gè)字符串.某個(gè)給定的模式將這些字符串分成兩類:一類是能匹配的,一類是不能匹配的。
要匹配某個(gè)模式(正則表達(dá)式)和$_的關(guān)系,可以將模式放在正斜線(//)之間,如下: $_ = “ yabbadabba doo”;if(/abba/){ print “ It matched!n”;
}模式匹配通常返回 true 或 false,因此經(jīng)常用在 if 或 while 的條件表達(dá)式部分
引入特殊字符的原因,它們被叫做元字符(metacharacters),在正則表達(dá)式中具有特殊的含義。點(diǎn)(.)是通配符,它可以匹配任何單個(gè)的字符,但不包括換行符(“ n ”)。因此,模式/bet.y/將匹配 betty。同時(shí)也匹配betsy ,bet=y , bet.y,或者說任意字符串后接 bet, 然后是任意的單個(gè)字符(不包括換行符),后接 y。如果只希望點(diǎn)(.)匹配句號(hào),可以使用反斜線。這條規(guī)則對(duì) Perl 正則表達(dá)式中所有元字符均有效:元字符前使用反斜線將使它變成普通的字符。反斜線是第二個(gè)元字符。如果需要真正的反斜線,需要重復(fù)使用兩個(gè)反斜線。
星號(hào)(*)表示匹配前一項(xiàng)0次或者多次。.* 將匹配任意多個(gè)任意字符(不含換行符)的字符串。加(+)的意思是可以匹配前面一項(xiàng)的一個(gè)或多個(gè)。問號(hào)(?),其含義是前面一個(gè)項(xiàng)出現(xiàn)一次,或者不出現(xiàn)。括號(hào)(())用來表示分組。例如,模式/fred+/ 能匹配上如fredddddddd,這樣的字符串,但這種字符串在實(shí)際中沒有什么用途。模式/(fred)+/能匹配上像fredfredfred這樣的字符串。
豎線(|),在這種用法中通常被讀作“或(or)”,意思是匹配左邊的或者右邊的。
字符類,是方括號(hào)[]中的一列字符,可以匹配上括號(hào)內(nèi)出現(xiàn)的任意單個(gè)字符。它匹配一個(gè)字符,但這個(gè)字符可以是列中的任意一個(gè)。字符類前使用符號(hào)^將取此字符類的補(bǔ)集。也就是說,[ ^def ]]將匹配上這三個(gè)字符中之外的任意單個(gè)字符。[^n-z]將匹配上 n,-, z 之外的任何字符。
任何數(shù)字的類,[0-9],可以被簡(jiǎn)寫為:d。w 被稱作“ word’字符:[A-Za-z0-9_]。
s 對(duì)于匹配空白(whitespace)將非常方便。它等價(jià)于[ f tnr ],其含 5 個(gè)空白字符:格式符(form-feed);制表符(tab),換行符,回車,以及空格符。使用[^ d] , [^ w], 和[^ s],其含義分別是,非數(shù)字的字符,非 word(記住我們對(duì) word 的定義)的字符,和非空白的字符。也可以使用它們對(duì)應(yīng)的大寫形式:D, W, S 來完成。[ dD],它的意思是任何數(shù)字,和任何非數(shù)字,則意指任何字符。
不區(qū)分大小寫:/I匹配 FRED 時(shí),也能匹配上fred, Fred,可以使用修飾符 /i: print “ Would you like to play a game? ”;chomp($_ =
print “ In that case, I recommend that you go bowling.n”;}
匹配任何字符:/s
b,是針對(duì)單詞使用的。如/bfred b/可以匹配上單詞fred,但不能匹配frederick
符號(hào)^(脫字字符◆)表示在字符串的開頭進(jìn)行匹配,而符號(hào)$則表示在結(jié)尾◆
只想要一個(gè)詞界錨定,當(dāng)使用 / bhunt/ 將匹配上像 hunt , hunting , hunter,這樣的單詞,但不會(huì)匹配 shunt,而/stoneb/ 將匹配 sandstone, flintstone,而不能匹配上 capstones。非詞界錨定為B。它將在任何非b 匹配的點(diǎn)上進(jìn)行匹配。因此,模式/bsearchB/將匹配 searches , searching, searched , 但不能匹配 search,或者 researching。
匹配上的那部分字符串將自動(dòng)存儲(chǔ)在$&之中。$`中含有正則表達(dá)式引擎在匹配成功前所找到的變量,而$'為此模式還沒有匹配的剩余部分。
花括號(hào)({}),花括號(hào)中有 2 個(gè)數(shù)字,由逗號(hào)隔開,表示前面一項(xiàng)允許重復(fù)的次數(shù)。模式/a{5,15}/將匹配 5 個(gè)到 15 個(gè) a 中的任意一個(gè)(包括 5,和 15)。星號(hào)(*)等同于{0,},表示 0 個(gè)或多個(gè)。加號(hào)(+)等同于{1,},表示 1 個(gè)或多個(gè)。而問號(hào)(?)則等同于{0,1}。
1.在此優(yōu)先級(jí)表的最頂端是括號(hào):(()),在分組和引用內(nèi)存值的時(shí)候使用。括號(hào)內(nèi)部的任何部分比括號(hào)外的部分結(jié)合更緊 密。
2.第二級(jí)是數(shù)量詞。這里有星號(hào)(*), 加號(hào)(+),問號(hào)(?)以及由花括號(hào)表示的數(shù)量詞,如{5,15}, {3, }, {5}等。它們通常 和前一項(xiàng)元素結(jié)合。3.第三級(jí)的是錨定和序列(sequence)。錨定包括(^)表明字符串的開頭,($)表明結(jié)尾,(b)詞界符,(B)非詞界符。序列(一
個(gè)元素緊接著一個(gè)元素)實(shí)際上是一種操作,雖然它沒有使用元字符。這段話的含義是一個(gè)單詞中的字母結(jié)合更緊密,就 像錨定緊貼字母一樣。
4.優(yōu)先級(jí)最低的是豎線(|),表示或。由于其優(yōu)先級(jí)最低,它通常將模式劃分成幾個(gè)部分。它在優(yōu)先級(jí)最底端是因?yàn)槲覀兿?/p>
望像|/fred|barney/ 里面的字母比或(|)結(jié)合更緊密。如果或(|)的優(yōu)先級(jí)比序列的優(yōu)先級(jí)更高, 那么,上述模式的含義是匹配fre, 接著是 d 或者 b , 然后是arney。因此,或(|)的優(yōu)先級(jí)最低,字母序列的優(yōu)先級(jí)要高些。s ///操作的則類似于“查詢并替換(search and replace)”。它將替換變量中◆模式所匹配上的部分:$_ = “ He’ s out bowling with Barney tonight.”;s/Barney/Fred/;#Barney 被 Fred 替換掉 print “ $_n”;
如果沒有匹配上,則什么也不會(huì)發(fā)生,此變量也不會(huì)有任何更改:s/// 會(huì)返回一個(gè) Boolean 值。如果成功替換則返回 true ;否則返回 false。
修飾符/g 要求 s/// 將不相重疊◆的所有匹配上的部分都進(jìn)行替換: $_ = “home, sweet home!”;s/home/cave/g;print “ $_n”;# “ cave, sweet cave!”;
全局替換的一個(gè)常用地方是將多個(gè)空格用單個(gè)空格替換掉:
$_ = “ Input data t may hav e extra whitespace.”;s/s+/ /g;#現(xiàn)在是“ Input data may have extra whitespace.”
s/^s+//;#將開頭的空白去掉 s/s+$//;#將結(jié)尾的空白去掉
除了/g 修飾符外◆,替換操作中還可以使用/i , /x, 和 /s,這些在普通的模式匹配中已經(jīng)出現(xiàn)過的修飾符。
U 要求緊接著的均是大寫: $_ = “ I saw Barney with Fred.”;
s/(fred|barney)/U$1/gi;#$_ 現(xiàn)在是“ I saw BARNEY with FRED.”
要求后面的均為小寫:L:
s/(fred)|barney/L$1/gi;#$_現(xiàn)在是“ I saw barney with fred.”
split,它根據(jù)某個(gè)模式將字符串分割開。這對(duì)于由制表符分割開,冒號(hào)分割開,空白分割 開,或者任意字符分割開的數(shù)據(jù)是非常有用的◆。任何可在正則表達(dá)式之中(通常,是一個(gè)簡(jiǎn)單的正則表達(dá)式)指定分離符(separator)的地方,均可用 split。@fields = split /separtor/, $string;split◆將模式同字符串進(jìn)行比較,將由分離符所分隔開的子串作為列表返回回來 @fields = split /:/, “abc:def:g:h”;#返回(“abc” , “def” , “ g” , “ h”)可能得到空的元素,如果其中有兩個(gè)分隔符是連在一起的:
@fields = split /:/, “abc:def::g:h”;#得到(“abc” , “def” , “” , “ g” , “ h”)這里有一條規(guī)則:開頭的空元素會(huì)被返回,但結(jié)尾的空元素被丟棄◆空白/ s+/這個(gè)模式進(jìn)行分割是非常常見的。在這個(gè)模式下,所有的空白等價(jià)于單個(gè)空格: my $some_input = “ This is a t test.n”;
my @args = split /s+/, $some_input;#(“ This ” , “ is” , “ a ” , “ test.”)默認(rèn)時(shí),split 對(duì)$_操作,模式為空白: my @fields = split;#同 split / s+/, $_;
join 函數(shù)將這些分割的部分組合成一個(gè)整體。join 函數(shù)類似于: my $result = join $glue, @pieces;join 函數(shù)的第一個(gè)參數(shù)是粘合元素(glue),它可以是任意字符串 my $x = join “ :” , 4, 6, 8, 10, 12;#$x 為“ 4:6:8:10:12”
在fred and barney went bowling last night 上使用/fred.+barney/ 進(jìn)行匹配.+,它將匹配除了換行符之外的任意字符,次數(shù)大于等于一。但,由于加號(hào)(+)是貪婪的;它將盡可能的進(jìn)行匹配。因此,它將匹配剩余的所有字符串
在fred and barney went bowling last night 上使用/fred.+?barney/ 進(jìn)行匹配 不是使用加號(hào)(+), 而是使用非貪婪的數(shù)量詞 +?,它將匹配一次或 多次(加號(hào)的意思),但其匹配盡可能少的次數(shù),而非盡可能多的次數(shù)
第四篇:Java從入門到精通讀書筆記—c++程序員學(xué)java
Java從入門到精通讀書筆記—c++程序員學(xué)java
第一章:
2分鐘看完,老生常談,即使沒怎么用過java也知道這些。
第二章:
1.instanceof應(yīng)該是c++中沒有的,c++使用RTTI解決這個(gè)問題的,很難用。
2.super這種引用父類的方法也是比較簡(jiǎn)單的,C++中是用父類名::父類方法()解決的,有點(diǎn)難看。
3.自動(dòng)類型轉(zhuǎn)換和C++一樣,精度變高的隨便轉(zhuǎn),精度變低的會(huì)丟失。
4.強(qiáng)制類型轉(zhuǎn)換只有(type)這一種,不像c++有static_cast、dynamic_cast、reinterpret_cast、和const_cast。
5.運(yùn)算符什么的和c++幾乎一模一樣。
半小時(shí)看完。
第三章:
1.break可以跳出語句塊,c++中沒有語句塊。語句塊的定義就是在一段語句前加上花括號(hào)和冒號(hào);
其他基本上和c++一樣,5分鐘看完。
第四章:
1.java數(shù)組越界會(huì)在運(yùn)行時(shí)拋異常,c++不會(huì),聲明數(shù)組的方法也有些不一致。
java 聲明數(shù)組的所有辦法
int[] a = new int[4];
int a[] = new int[4];
int[] a = {1, 15, 26};
int a[] = {1, 15, 26};
2.java的數(shù)組是一個(gè)對(duì)象,自帶length屬性,使用簡(jiǎn)單。c++的數(shù)組不自帶方法和屬性,要知道數(shù)組長(zhǎng)度只能sizeof(arrayObject)/sizeof(int)。當(dāng)然如果使用STL中的vector之類的也和java一樣簡(jiǎn)單。
3.java的所謂數(shù)組賦值(或者叫數(shù)組拷貝)其實(shí)就是c++中的兩個(gè)數(shù)組指針的賦值,java沒有指針,所以作者費(fèi)了一大堆口水。好在java有垃圾回收,要不然一個(gè)指針的內(nèi)存就算泄露了。至于真正的數(shù)組內(nèi)容賦值,是使用System.arraycopy(ir, srcPos, ir, destPos, length);而C++一般使用memcpy等函數(shù)。若使用STL中的vector,那么就看vector的拷貝構(gòu)造函數(shù)怎么寫的,應(yīng)該是vector的對(duì)象賦值過去而不是指針指過去。
4.重溫了冒泡排序(時(shí)間復(fù)雜度O(n2)),和快速排序(最壞情況的時(shí)間復(fù)雜度為O(n2),最好情況時(shí)間復(fù)雜度為O(nlog2n))。
5.For-Each語法被引入java了,在很多地方用起來真是簡(jiǎn)單。Python和c#早就支持了,c++中雖然STL的algorithm包中引入了for_each,但是由于需要使用函數(shù)指針還是略顯繁瑣。
這章挺多,看了一個(gè)多小時(shí)??!
第五章:類和對(duì)象
1.Java中方法的重載和c++的一樣,都是通過參數(shù)的不同來區(qū)別。但是c++中可以設(shè)置默認(rèn)參數(shù),而java不可以。
2.java中的對(duì)象大部分只能new出來,或者clone出來,或者反射出來,而不能直接在棧上定義出來。而c++的對(duì)象在棧上和堆上創(chuàng)建的都很多。
3.基本類型的參數(shù)傳遞,java和c++都是傳值。對(duì)象的參數(shù)傳遞,java是傳引用,c++是拷貝,也就是傳值。其實(shí)c++中大部分時(shí)候也是傳引用或者傳指針,但java沒有指針,也沒有選擇耗時(shí)耗空間的拷貝,只能傳引用了。
這章對(duì)于c++程序員來說太簡(jiǎn)單,幾分鐘過一遍就可以了。
第六章:繼承
1.方法被覆寫后,如果要調(diào)用父類的方法,c++必須用父類名::方法名,而java用super.方法名即可。
2.多態(tài)和動(dòng)態(tài)綁定,java和c++幾乎一樣,都很簡(jiǎn)單。
3.final關(guān)鍵字:java中的final關(guān)鍵字可以將一個(gè)類限制為無法繼承的,同樣的還有C#中的sealed關(guān)鍵字。而c++是沒有這個(gè)玩意的。
4.java的抽象類和c++幾乎一樣。
5.java是獨(dú)根語言,引入了Object類,它的clone方法就好像c++中的拷貝構(gòu)造函數(shù),它的equals方法是用來比較內(nèi)容的,而toString方法是將對(duì)象作為字符串輸出的。
這章對(duì)于c++程序員來說同樣簡(jiǎn)單,幾分鐘過一遍就可以了。
第七章:接口
1.java中有接口。C++沒有,唯一類似的是含有純虛函數(shù)的虛類(沒有純虛基類這個(gè)說法)。但是COM、CORBA等中間件中都有IDL語言(接口定義語言),使用這些中間件的c++程序員也沒有少寫接口。
2.接口實(shí)現(xiàn)的一些規(guī)定:
1)如果實(shí)現(xiàn)接口的不是抽象類,則必須實(shí)現(xiàn)其接口的所有方法才能被實(shí)例化;
2)接口中所有的方法默認(rèn)為public;
3.接口可以用來實(shí)現(xiàn)多態(tài);
4.java的內(nèi)部類和c++差不多,都沒人關(guān)心,最多懶得想名字的時(shí)候用用那個(gè)匿名內(nèi)部類(例如什么UI的響應(yīng)函數(shù))。
5.java的對(duì)象克隆,吹了一堆就是個(gè)c++中的拷貝構(gòu)造函數(shù)。所謂什么“淺克隆、深克隆”問題,就是c++中拷貝構(gòu)造是遇上類中定義了指針的問題。C++程序員一望即知。
接口是為了維護(hù)單繼承機(jī)制弄出來的,花半小時(shí)看看還是值得的。
第八章:面向?qū)ο缶幊?/p>
C++程序員不用看。
第九章:異常處理
1.java的異常處理中有finally語句塊,而c++中沒有,所以程序員要自己想辦法來處理異常發(fā)生后諸如“資源釋放”之類的問題;
第十章:線程
1.java語言自帶線程機(jī)制,c++目前還是不帶線程機(jī)制的。雖然boost::thread庫也被眾多c++程序員廣泛使用。但是windows下用得最多的還是windows SDK自帶的線程函數(shù);而linux下用得最多的還是pthread。另外還有一些號(hào)稱同時(shí)支持多個(gè)平臺(tái)的多線程庫。
2.java多線程有兩種方法實(shí)現(xiàn),第一是派生Thread類,第二種是實(shí)現(xiàn)Runnable接口。
3.java線程分為4種狀態(tài):new、runnable、non runnable和done,這和其他線程庫大同小異;
4.run、start、stop、sleep、suspend、resume、yield、wait、notify和notifyall等方法的含義也和其他線程庫一致。但suspend、resume和stop等方法是不建議使用的,因?yàn)榭赡軙?huì)導(dǎo)致死鎖。
5.java可使用join方法來等待線程結(jié)束,而在某些線程庫中join方法經(jīng)常是不可用的。
6.java的互斥使用synchonized關(guān)鍵字實(shí)現(xiàn),它很類似于boost.thread中的lock(mutex),只不過它是對(duì)線程對(duì)象隱含的鎖加鎖。其實(shí)這很不利于新手理解。另外還介紹了synchonized的一些亂七八糟的用法,相信對(duì)于新手這只有反作用。
這一章對(duì)于線程,介紹得比較淺顯,實(shí)現(xiàn)簡(jiǎn)單的多線程應(yīng)該沒問題,但是稍微復(fù)雜一點(diǎn)的也許就需要其他的開發(fā)包了。Java線程連個(gè)Mutex類都沒有,這是最讓我吃驚的,僅僅使用synchonized來實(shí)現(xiàn)同步、互斥、信號(hào)量該多麻煩啊,也許是我還沒弄懂java多線程吧。
第十一章:圖形編程
1.IDE的年代,GUI還是畫出來吧。Java中也就Layout類需要看看,其他大部分Layout類也是湊數(shù)的,根本不會(huì)有人用。
第十二章:事件處理
隨便看看了解即可,新手可以試著寫寫代碼,老手直接IDE中添加事件即可。
第十三章:Swing用戶界面設(shè)計(jì)
同第十一章,隨便看看即可。界面一般有專人搞,普通程序員能看懂就行了。
總結(jié):《java從入門到精通》這本書整體質(zhì)量尚可,c++熟手大概一到兩天可以看完,掌握程度在80%左右。看完后能夠有一些基本概念,可以寫一些基本程序。看完后離入門還早,更談不上精通了。
說說我看完后的兩個(gè)迷惑之處吧,第一是從來沒有提到j(luò)ava中的對(duì)象、常量、代碼所在的堆、棧等內(nèi)存分布情況,對(duì)于c++程序員來說是很難適應(yīng)的,可能是篇幅的原因吧;第二沒有介紹垃圾回收機(jī)制,這可能是c++程序員更感興趣的吧。
第五篇:成都軟件技術(shù)培訓(xùn)學(xué)校哪家好?做Java程序員的Perl教程
國(guó)信安教育基地 004km.cn
成都軟件技術(shù)培訓(xùn)學(xué)校哪家好?做Java程序員的Perl教程
成都國(guó)信安軟件技術(shù)培訓(xùn)由副教學(xué)總監(jiān),優(yōu)秀講師帶隊(duì)并親自授課,秉承成都國(guó)信安一貫的專業(yè)品質(zhì)態(tài)度,在課程質(zhì)量,學(xué)生素質(zhì),就業(yè)服務(wù)上相當(dāng)嚴(yán)格要求,并以學(xué)業(yè)滿意就業(yè)為目標(biāo),打造國(guó)內(nèi)優(yōu)秀軟件技術(shù)培訓(xùn)班,感興趣的同學(xué)不妨關(guān)注國(guó)信安教育基地了解一下吧。
為什么越來越多的90后偏愛互聯(lián)網(wǎng)行業(yè)呢?他們的擇業(yè)觀與80后有哪些區(qū)別呢?
在公司內(nèi)部,90后更偏愛自由開放的企業(yè)文化。從調(diào)查結(jié)果來看,有73%的受訪者贊同“開放自由、相對(duì)寬松”是最理想的企業(yè)文化,僅有13%的受訪者可以接受“嚴(yán)格守序、集體高于個(gè)人的傳統(tǒng)企業(yè)文化”。在追求自由的風(fēng)格影響下,大部分90后都明確表示反感辦公室八卦和職場(chǎng)潛規(guī)則。
每一代人都有自己的擇業(yè)觀——70后追求穩(wěn)定“鐵飯碗”;80后奉行實(shí)用主義,看重職業(yè)發(fā)展;而90后愛高薪更愛自由。波士頓咨詢公司的最新分析報(bào)告顯示,2014年互聯(lián)網(wǎng)行業(yè)在中國(guó)直接創(chuàng)造了170萬個(gè)就業(yè)機(jī)會(huì)。隨著行業(yè)的進(jìn)一步發(fā)展,預(yù)計(jì)2020年有望直接為約350萬人帶來就業(yè)機(jī)會(huì)。短短幾年間,蓬勃發(fā)展的互聯(lián)網(wǎng)公司已經(jīng)成為深受90后青睞的就業(yè)選擇。很多90后之所以熱衷在互聯(lián)網(wǎng)企業(yè)就業(yè),與行業(yè)廣闊的發(fā)展空間、人性化的管理風(fēng)格以及誘人的薪酬福利有著密切關(guān)系。
四川是旅游的天堂,無法拒絕她火辣辣的美食,無法拒絕她驚艷的自然風(fēng)光,更無法拒絕她的古蜀文化。有的同學(xué)因高考落榜而黯然神傷,不知道出路在哪里?首先需要說明,高考落榜是個(gè)普遍問題,讀大學(xué)不是人生的唯一出路,條條大道通羅馬,不上普通大學(xué)人生更很精彩。君不見,大學(xué)生就業(yè)形勢(shì)嚴(yán)峻,大學(xué)生畢業(yè)即失業(yè)。一邊是大學(xué)生求職難,一方面是企業(yè)技能人才用人荒,此現(xiàn)象可謂冰火兩重天。許多人觀念正在悄然轉(zhuǎn)變,讀大學(xué)不如學(xué)技術(shù)。學(xué)習(xí)的目的是就業(yè),有個(gè)美好未來。作為高薪行業(yè),IT行業(yè)一直是年輕人求職的首選?;ヂ?lián)網(wǎng)行業(yè)以其超過百萬的人才缺口和長(zhǎng)效的職業(yè)發(fā)展期而倍受青睞。未來人們對(duì)互聯(lián)網(wǎng)的運(yùn)用需求仍將持續(xù)不斷上升。因而,對(duì)于那些對(duì)互聯(lián)網(wǎng)新興事物感興趣的學(xué)生而言,選擇IT行業(yè),是絕佳的選擇。
在日常生活中,大家都多多少少聽說過IT培訓(xùn),那么各位對(duì)其了解又有多少呢?是不是哪個(gè)更靠譜是大家比較關(guān)心的問題?接下來就讓小編帶你來看看IT培訓(xùn)相關(guān)的情況吧~請(qǐng)看下文~ 國(guó)信安教育基地 004km.cn
Java教程中一般講解的都是Java的知識(shí),本次給大家講的是Perl教程,因?yàn)樽鳛橐粋€(gè)Java程序員在工作中都會(huì)用帶
Perl.下面給大家講解Java教程-作為Java開發(fā)人員如何快速學(xué)習(xí)Perl。
1.從基礎(chǔ)開始
不像java,Perl不需要“main”方法作為入口點(diǎn)。要運(yùn)行一個(gè)簡(jiǎn)單的Perl程序如下:
# comment starts wITh “#” # the name is hello.pl print “Hello Perl!”;
perl hello.pl
2.日期類型
在Perl中的日期類型是非常簡(jiǎn)單,它有3種類型:標(biāo)量,數(shù)組和Hash。標(biāo)是一個(gè)單值,它基本上可以是任何其他比數(shù)組或哈希。數(shù)組是一個(gè)數(shù)組,可以包含不同類型的元素,如整數(shù),字符串。哈?;旧鲜窍馢ava的HashMap中。將下面的代碼結(jié)合所有的使用情況。國(guó)信安教育基地 004km.cn
#claim a hash and assign some values my %aHash;$aHash{'a'}=0;$aHash{'b'}=1;$aHash{'c'}=2;$aHash{'d'}=3;$aHash{'e'}=4;
#put all keys to an array my @anArray = keys(%aHash);
#loop array and output each scalar foreach my $aScalar(@anArray){ print $aScalar.“n”;}
輸出結(jié)果: e c a b d
如果你想對(duì)數(shù)組進(jìn)行排序,你可以簡(jiǎn)單地使用類似下面的排序功能:
foreach my $aScalar(sort @anArray){ print $aScalar.“n”;}
3.條件、循環(huán)表達(dá)式
Perl為條件和循環(huán)語句準(zhǔn)備了if, while, for, foreach等關(guān)鍵字,這與Java非常類似(swITch除外)。詳情請(qǐng)見下面的代碼:
#if my $condITion = 0;if($condITion == 0){ print “=0n”;} elsif($condITion == 1){ print “=1n”;} else{ 國(guó)信安教育基地 004km.cn
print “othersn”;}
#while while($condITion < 5){ print $condITion;$condITion++;} for(my $i=0;$i< 5;$i++){ print $i;}
#foreach my @anArray =(“a”, 1, 'c');foreach my $aScalar(sort @anArray){ print $aScalar.“n”;}
4.文件的讀寫
下面這個(gè)例子向我們展示了如何讀寫文件。這里請(qǐng)注意“>”和“>>”之間的區(qū)別,“>>”在文件末尾追加內(nèi)容,“>”創(chuàng)建一個(gè)新的文件儲(chǔ)存信息。
#read from a file my $file = “input.txt”;open(my $fh, “ $file!”;while(my $aline =){ #chomp so no new line character chomp($aline);print $aline;}
close $fh;
# wrITe to a file my $output = “output.txt”;open(my $fhOutput, “>”, $output)or die(“Error:
Cannot open $output file!”);print $fhOutput “something”;close $fhOutput;國(guó)信安教育基地 004km.cn
5.正則表達(dá)式
Perl中有兩種使用正則表達(dá)式的方法:m和s。下面的代碼在$str上應(yīng)用了正則表達(dá)式。如果$str的內(nèi)容是“programcreek”,表達(dá)式將會(huì)返回true。這也可以被用于條件判斷或循環(huán)。
$str =~ m/program(creek|river)/
6.傳值/引用的語法
在Perl中沒有必要定義方法/函數(shù),但如果你這么做了,那將大大提高代碼的模塊化和可充用性。但我們需要對(duì)參數(shù)的傳遞非常小心。你可以直接傳遞一個(gè)標(biāo)量,但如果傳遞的是數(shù)組或哈希類就需要特別的當(dāng)心。
數(shù)組:
my @testArray =(1, 3, 2);
#In sub sub processArrayByReference($){ my $arrayref = shift;my @array
= @$arrayref;#...}
#In sub processarray: sub processArrayByValue($){ my @array = @_;#...}
processArrayByValue(@testArray);processArrayByReference(@testArray);
哈系類:
sub printHash($){ my %hash = %{ shift()};for my $key(sort keys %hash){ my $value = $hash{$key};print “$key => $valuen”;} }
printHash(%twoLettersCount);國(guó)信安教育基地 004km.cn
7.一些實(shí)例
1).遍歷字符串中的每個(gè)字符。
my @lineCharArray = splIT('',$aline);foreach my $character(@lineCharArray){ print $character.“n”;}
2).創(chuàng)建一個(gè)包含26個(gè)字母的數(shù)組。my @charArray =('a'..'z');my @twoCharArray =('aa'..'zz');
你可以簡(jiǎn)單地實(shí)現(xiàn)這個(gè)功能并且無需循環(huán)26次。
從Java教程中,不能單單的了解Java的知識(shí),在工作中能用到的知識(shí)都應(yīng)該去學(xué)習(xí)并熟練應(yīng)用,這樣才能在工作中更加出色。
國(guó)信安IT培訓(xùn)基地專注java培訓(xùn)、php培訓(xùn)、UI設(shè)計(jì)培訓(xùn)、軟件測(cè)試培訓(xùn)、大數(shù)據(jù)培訓(xùn)、web前端培訓(xùn)等培訓(xùn)課程。你們準(zhǔn)備好怎么學(xué)習(xí)IT技術(shù)了嗎?來參加國(guó)信安IT培訓(xùn)課程,你的選擇不會(huì)有錯(cuò)!