版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
perl的一些基本用法.txt如果青春的時(shí)光在閑散中度過,那么回憶歲月將是一場凄涼的悲劇。雜草多的地方莊稼少,空話多的地方智慧少。即使路上沒有花朵,我仍可以欣賞荒蕪。perl基本用法2010-02-1009:50s/\s+//g將空白符變成一個(gè)空格;s/"\s+//去掉首空白;s/\s+$//去掉尾空白;s/八s+|\s+$//去掉首尾空白;大小寫轉(zhuǎn)化的例子:s/(fred|barney)/\U$1/gi匹配所有的忽略大小寫,替換成大寫;s/(fred|barney)/\L$1/gi匹配所有的忽略大小寫,替換成小寫;s/(\w+)(\w+)/\U$2\E$1/i$2變成大寫$1還是保持小寫,\E結(jié)束轉(zhuǎn)換;CPAN是ComprehensivePerlArchiveNetwork的縮寫,中譯為Perl綜合典藏網(wǎng)。它包含了極多用Perl寫成的軟件和模塊。CPAN相關(guān)軟件的安裝方法最近幾天安裝SPAMASSASSIN,牽涉到許多CPAN的安裝,以前都是缺少什么,就去CPAN網(wǎng)站尋找相應(yīng)的模塊,自己編譯安裝,后來發(fā)現(xiàn)其實(shí)CPAN自己的shell命令就可以很方便的安裝相應(yīng)模塊,真是方便當(dāng)然前提你必須安裝perl-CPAN,在我的redhat9.0上的版本是perl-CPAN-1.61-88,大家沒裝的話,直接用光盤的rpm包安裝即可。安裝后運(yùn)行[root@wwwCPAN]#perl-MCPAN-eshellcpanshell--CPANexplorationandmodulesinstallation(v1.61)ReadLinesupportavailable(try'installBundle::CPAN')cpan>ftAcpan的shell,好了,我為了安裝spamassassin,需要安裝以下幾個(gè)installDigest::SHA1installHTML::ParserinstallStorableinstallDB_FileinstallNet::DNSinstallNet::SMTPinstallMail::SPF::QueryinstallIP::Country::FastinstallIO::Socket::SSLinstallTime::HiResinstallDBI是不是很方便呀,不用再單獨(dú)下載編譯安裝了,類型字符例子用于哪種名字標(biāo)量$$cents一個(gè)獨(dú)立的數(shù)值(數(shù)字或字串)數(shù)組@@large一列數(shù)值,用編號做鍵字散列%%interest一組數(shù)值,用字串做鍵字子過程&&how一段可以調(diào)用的Perl代碼類型團(tuán)**struck所有叫struck的東西手冊頁內(nèi)容perl有些什么perl手冊頁perldata數(shù)據(jù)類型perlsyn語法perlop操作符和優(yōu)先級perlre正則表達(dá)式perlvar預(yù)定義變量perlsub子過程prelfunc內(nèi)建函數(shù)perlmod如何令Perl模塊工作perlref參考手冊perlobj對象perlipc進(jìn)程間通訊perlrun如何運(yùn)行Perl命令,以及命令行開關(guān)perldebug調(diào)試perldiag診斷信息%perlopcomma%perlfuncsplit%perlvarARGV%perldiag'assignedtotypeglob,%perlfaqroundperltoc命令(自己也是一個(gè)手冊頁)搜索所有手冊頁收集的目錄%perltoctypeglobperl5005delta:Undefinedvalueassignedtotypeglobperldata:TypeglobsandFilehandlesperldiag:Undefinedvalueassignedtotypeglob或者搜索全部Perl在線文檔,包括所有頭,描述,和例子,對于任何字串的實(shí)例,使用perlhelp命令:%perlhelpCORE::GLOBAL參閱perldoc手冊頁獲取細(xì)節(jié)。手冊頁內(nèi)容perlfaql關(guān)于Perl的通用信息perlfaq2獲取和學(xué)習(xí)Perlperlfaq3編程工具perlfaq4數(shù)據(jù)操作perlfaq5文件和格式perlfaq6正則表達(dá)式perlfaq7通用Perl語言信息perlfaq8系統(tǒng)交互perlfaq9網(wǎng)絡(luò)手冊頁內(nèi)容perlamigaAmiga移植perlcygwinCygwin移植perldosMS-DOS移植perlhpuxHP-UX移植perlmachtenPowerMachTen?移植perlos2OS/2移植perlos390OS/390移植perlvmsDECVMS移植perlwin32MS-Windows移植比較數(shù)字字串返回值等于==eq如果$a等于$b返回真不等于=ne如果$a不等于$b返回真小于<lt如果$a小于$b返回真大于>gt如果$a大于$b返回真小于或等于<=</td>le如果$a不大于$b返回真比較<=>cmp相等時(shí)為0,如果$a大為1如果$b大為-1例子名字結(jié)果-e$a存在如果在$a中命名的文件存在則為真-r$a可讀如果在$a中命名的文件可讀則為真-w$a可寫如果在$a中命名的文件可寫則為真-d$a目錄如果在$a中命名的文件是目錄則為真-f$a文件如果在$a中命名的文件是普通文件則為真-T$a文本文件如果在$a中命名的文件是文本文件則為真名字ASCII定義代碼空白[\t\n\r\f]\s詞[a-zA-Z_0-9]\w數(shù)字[0-9]\d還有一件你必須知道的事情,缺省時(shí)量詞作用在它前面的單個(gè)字符上,因此/bam{2}/將匹配“bamm”而不是“bambam”。如果你要對多于一個(gè)字符使用量詞,你需要使用圓括弧,因此為了匹配“bambam”需要使用/(bam){2}/。構(gòu)造含義$days簡單標(biāo)量值$days$days[28]數(shù)組@days的第二十九個(gè)元素$days{'Feb'}散列%days的“Feb”值構(gòu)造含義${days}和$days一樣,不過在字母數(shù)字前面不易混淆$Dog::days在Dog包里面的不同的$days變量$#days數(shù)組@days的最后一個(gè)索引$days->[28]$days一個(gè)引用指向的數(shù)組的第二十九個(gè)元素$days[0][2]多維數(shù)組$days{200}{'Feb'}多維散列$days{2000,'Feb'}多維散列枚舉構(gòu)造含義@days包含($days[0],$days[1],...$days[n])的數(shù)組@days[3,4,5]包含($days[3],$days[4],$days[5])數(shù)組片段的數(shù)組@days[3..5]包含($days[3],$days[4],$days[5])數(shù)組片段的數(shù)組@days{'Jan','Feb'}包含($days{'Jan'},$days{'Feb'})片段的散列構(gòu)造含義%days(Jan=>31,F(xiàn)eb=>$leap?29:28,...)代碼含義\n換行符(常作LF)\r回車(常作CR)\t水平制表符\f進(jìn)紙\b退格\a警報(bào)(響鈴)\eESC字符\033八進(jìn)制的ESC\x7f十六進(jìn)制DEL\cCControl-C\x{263a}Unicode(笑臉)\N{NAME}命名字符代碼含義\u強(qiáng)迫下一個(gè)字符為大寫(Unicode里的“標(biāo)題”)\l強(qiáng)制下一個(gè)字符小寫\U強(qiáng)制后面所有字符大寫\L強(qiáng)制后面所有字符小寫\Q所有后面的非字母數(shù)字字符加反斜杠\E結(jié)束\U,\L,或\Q。常用通用含義替換''q//文本字串否""qq//文本字串是''qx//執(zhí)行命令是()qw//單詞數(shù)組否//m//模式匹配是s///s///模式替換是y///tr///字符轉(zhuǎn)換否""qr//正則表達(dá)式是#!/usr/bin/perl@lines='perldoc-u-fatan2';#反引號'通常在美式鍵盤數(shù)字1的左邊。不要和單引號'混淆了foreach(@lines){s/\w<(「〉]+)/\U$1/g;print;}chomp()這個(gè)函數(shù)是去到\n的,如果兩個(gè)\n只去掉一個(gè)。pop是在數(shù)組的結(jié)尾,彈出push是在數(shù)組的結(jié)尾,壓入。shift是在數(shù)組的開頭,彈出unshift是在數(shù)組的開頭,壓入reverse逆轉(zhuǎn)子程序返回值為最后一個(gè)被計(jì)算的表達(dá)式。在if代碼塊內(nèi)部,其語句沒有分號°Perl允許省略括號中最后一條語句的分號,在實(shí)際代碼中,通常僅當(dāng)此代碼塊僅包含一條語句時(shí)才省略此分號本書重點(diǎn)my($num)=@_;#列表context,同($sum)=@_;此為特殊列表,表內(nèi)只有一個(gè)變量my$num=@_;#標(biāo)量context,同$num=@_;例如@_=qw(abcdefg)還有補(bǔ)充就是($num)里得到的是值為a$num里得到的是@_的個(gè)數(shù)為7記住,如果沒有使用括號,my僅定義一個(gè)變量?my$first,$second沒有定義$secondmy($first,$second)兩個(gè)都定義了.$#name是name這個(gè)數(shù)組的最后一個(gè)索引艇name是對數(shù)組name進(jìn)行索引行輸入操作在到達(dá)文件的結(jié)尾時(shí)將返回undef,這對于從循環(huán)退出時(shí)非常方便的while(defined($line=<STDIN>)){print"Isaw$line";}可簡寫while(<STDIN>){print"Isaw$_";}在進(jìn)行深入討論前,我們要澄清一些事:這種簡寫只在特定的情況下有效,默認(rèn)的情況下不會(huì)將一行讀入變量$_。僅當(dāng)while循環(huán)的條件判斷部分只包含行輸入操作才有效?。如果在條件判斷部分還有別的內(nèi)容,則上述簡寫無效。這是Unix中很少人知道的一個(gè)事實(shí):如許多標(biāo)準(zhǔn)的工具,如cat,sed,也使用這種約定,連接號(-)代表標(biāo)準(zhǔn)輸入流。如果在第二次使用(〉之前重新初始化@ARGV,則能得到正確的結(jié)果@ARGV是一個(gè)數(shù)組,但是好像是perl內(nèi)定的一個(gè)數(shù)組.如果需要更多的這種選項(xiàng),那很可能你是使用模塊按照標(biāo)準(zhǔn)方法處理它們。參看Getopt::Long和Getopt::Std這兩個(gè)模塊,它們屬發(fā)布的Perl中的一部分于標(biāo)準(zhǔn)print@array;#打印出元素的列表print“@array”;#打印一個(gè)字符串(包含一個(gè)內(nèi)插的數(shù)組)第一個(gè)語句打印出所有的元素,一個(gè)接著一個(gè),其中沒有空格。第二個(gè)打印出一個(gè)元素,它%@array的所有元素,其被存在一個(gè)字符串中。也就是說,打印出@array的所有元素,并由空格分開?。如果@array包含qw/fredbarneybetty/?,則第一個(gè)例子輸出為:fredbarneybetty,而第二個(gè)例子輸出為fredbarneybetty(由空格分開)Perl在內(nèi)插數(shù)組時(shí),它會(huì)在元素之間加入空格。如果字符串包含了換行符print@arrey;如果字符串沒有換行符print"@arrey\n”;事實(shí)上,PerlPowerTools(PPT)項(xiàng)目的目標(biāo)是將所有傳統(tǒng)的Unix工具在Perl中實(shí)現(xiàn),它們幾乎實(shí)現(xiàn)了所有的工具(包括大多數(shù)的游戲),當(dāng)在如何實(shí)現(xiàn)shell時(shí)被難住了。PPT項(xiàng)目是成功的,因?yàn)樵诖蠖鄶?shù)non-UNIX系統(tǒng)中實(shí)現(xiàn)了標(biāo)準(zhǔn)的Unix工具。\d任意數(shù)字[0-9]\D除數(shù)字外的任意字符「0-9]\w任意單詞字符[_0-9a-zA-Z]\W任意非單詞字符「_0-9a-zA-Z]\s空白[\r\t\n\f]\S非空白「\r\t\n\f]g匹配所有可能的模式i忽略大小寫m將串視為多行o只賦值一次s將串視為單行x忽略模式中的空白因此.*將匹配任意字符任意多數(shù)但是.不匹配換行符這里提到的三個(gè)變量名為:$&,$',$'if(“Hellothere,neigbor”=~八S(\w+),/){print“Thatactuallymatched'$&'.\n”;}匹配的部分是“there,”(空格,單詞,和一個(gè)逗號)。變量$1中的值為there,而$&為整個(gè)被匹配的部分。匹配部分的前一部分存放在$'之中,后一部分被存到$'。另一種說法是,$、中含有正則表達(dá)式引擎在匹配成功前所找到的變量,而$'為此模式還沒有匹配的剩余部分。如果將這三個(gè)變量放在一起,你將得到原始字符串:if(“Hellothere,neighbor”=~八S(\w+),/){pirnt“Thatwas($')($&)($')”;}輸出的消息為(Hello)(there,)(neighbor),為這三個(gè)自動(dòng)匹配變量的值。三個(gè)變量的值可能是空的,和之前數(shù)字匹配變量的例子一樣。它們和數(shù)字匹配變量有相同的作用域。通常,在下次成功匹配前其值不變?,F(xiàn)在,我們討論我們之前說的“免費(fèi)”問題。是的,自由是要代價(jià)的。這里的代價(jià)是,如果你使用了這三個(gè)自動(dòng)匹配變量中的任意一個(gè),無論在程序的什么地方,其它地方的正則表達(dá)式的運(yùn)行數(shù)度會(huì)變慢一些。雖然,變慢的程度不大,但已經(jīng)足夠讓人擔(dān)憂,因此許多Perl程序員從不使用這些自動(dòng)匹配變量?。相反的,使用的替代的方法。例如,如果需要使用$&,那么在整個(gè)模式上加上括號,并使用$1代替。這些在替換中出現(xiàn)的大小寫轉(zhuǎn)換的修飾符,也可在雙引號中使用:print“Hello,\L\u$name\E,wouldyouliketoplayagame?\n”;默認(rèn)時(shí),split對$_操作,模式為空白:my?fields=split;#同split/\s+/,$_;my?values=split/:/,$x;#@values為(4,6,8,10,12)my$z=join"-”,?values;#$z為“4-6-8T0T2”split和join可以一起使用,但不要忘了join的第一個(gè)參數(shù)是字符串,而非模式我們將整個(gè)文件讀入一個(gè)變量之中openFILE,$filenameordie"Can’topen'$filename':$!”;#如果打不開文件,出提示打不開的原因my$lines=join'',<FILE>;$lines=~s/"/$filename:/gm;這是?號在正則表達(dá)式中的第四種用法:問號,表示0或1的數(shù)量詞,非貪婪修飾符,現(xiàn)在是開頭符?:unless($mon=~/"Feb/){print"Thismonthhasatleastthirtydays.\n”;}else{print"Doyouseewhat'sgoingonhere?\n”;}同下面if($mon=~/"Feb/){print"Doyouseewhat'sgoingonhere?\n”;}else{print"Thismonthhasatleastthirtydays.\n”;}Pascal程序員應(yīng)當(dāng)小心:在Pascal中,重復(fù)的until語句至少要執(zhí)行一次迭代,但Perl中的until循環(huán)可能一次也不執(zhí)行,如果循環(huán)執(zhí)行前的條件表達(dá)式的值為真。print"$nisanegativenumber.\n"if$n<0;同下面if($n<0){print"$nisanegativenumber.\n”;}還有一些其它的修飾語:&error("Invalidinput”)unless&valid($input);$i*=2unitl$i>$j;print"”,($n+=2)while$n<10;&greet($_)foreach@person;Perl沒有像C語言“switch”結(jié)構(gòu)中的“fall-through(直接跳入)”下一個(gè)代碼塊的功能for這三個(gè)部分(初始化,條件判斷,步長)的任意部分均能為空,但分號不能省略。前面三個(gè)操作符&&,||,?:,均有一個(gè)共同的特殊性質(zhì):根據(jù)左側(cè)的值(true或false),來判斷是否執(zhí)行右側(cè)代碼。&&表示,如果左面的值為真,則執(zhí)行右側(cè)的代碼,||表示左面的值為假時(shí),則執(zhí)行右側(cè)的代碼。foreach(1..10){print“Iterationnumber$_.\n\n”;print“Pleasechoose:last,next,redo,ornoneoftheabove?”;chomp(my$choice=<STDIN>);print"\n”;lastif$choice=~/last/i;nextif$choice=~/next/i;redoif$choice=~/redo/i;print“Thatwas’tanyofthechoices…onward!\n\n”;}print"That’sall,folks\n”;|文件檢測選項(xiàng)及其含義|============================================================1檢測選項(xiàng)含義-r文件或目錄對此(有效的)用戶(effectiveuser)或組是可讀的-w文件或目錄對此(有效的)用戶或組是可寫的-x文件或目錄對此(有效的)用戶或組是可執(zhí)行的-o文件或目錄由本(有效的)用戶所有-R文件或目錄對此用戶(realuser)或組是可讀的-W文件或目錄對此用戶或組是可寫的-X文件或目錄對此用戶或組是可執(zhí)行的-O文件或目錄由本用戶所有-e文件或目錄名存在-z文件存在,大小為0(目錄恒為false)-s文件或目錄存在,大小大于0(值為文件的大小,單位:字節(jié))-f為普通文本-d為目錄-l為符號鏈接-S為socket-p為管道(Entryisanamedpipe(a"fifo”))-b為block-special文件(如掛載磁盤)-c為character-special文件(如I/O設(shè)備)-usetuid的文件或目錄-gsetgid的文件或目錄-kFileordirectoryhasthestickybitset-t文件句柄為TTY(系統(tǒng)函數(shù)isatty()的返回結(jié)果;不能對文件名使用這個(gè)測試)-T文件有些像“文本”文件-B文件有些像“二進(jìn)制”文件-M修改的時(shí)間(單位:天)-A訪問的時(shí)間(單位:天)-C索引節(jié)點(diǎn)修改時(shí)間(單位:天)my@all_files=<*>;##基本上同@all_files=glob"*”一樣;my@files=<FRED/*>;㈱globmy@lines=<FRED>;##文件句柄讀入my$name="FRED”;my@files=<$name/*>##glob如果需要,可以使用readline得到間接文件句柄讀入的操作my$name="FRED”;my@lines=readlineFRED;#從FRED讀入my@lines=readline$name;#從FRED讀入(使用opendir而非open),從中讀入(使用readdir而非readline),關(guān)閉(使用closedir而非close)。不是讀入文件的內(nèi)容,而是將一個(gè)目錄中的文件名(以及一些其它東西)讀入,如下例:my$dir_to_process="/etc”;opendirDH,$dir_to_processordie"Cannotopen$dir_to_process:$!”;foreach$file(readdirDH){print"onefilein$dir_to_processis$file\n”;}closedirDH;?某些人知道rm通常會(huì)提示你是否刪除這一類的文件。但rm是一個(gè)命令,而unlink是系統(tǒng)調(diào)用。系統(tǒng)調(diào)用從不詢問權(quán)限,它們也從不道歉說自己錯(cuò)了。?這不是唯一的一個(gè)經(jīng)常詢問的問題;怎樣一次將一批文件重命名是在這些新聞組中最常問的。這也是在大多數(shù)新聞組的FAQ中,這通常是第一個(gè)回答的問題。直到現(xiàn)在,它仍然占據(jù)第一的位置。foreachmy$file(glob"*.old”){my$newfile=$file;$newfile=~s/\.old$/.new/;if(-e$newfile){warn"can’trename$fileto$newfile:$newfileexists\n”;}elsif(rename$file,$newfile){㈱成功,什么也不做}else{warn"rename$fileto$newfilefailed:$!\n”;}}要找出符號連接指向的地方,使用readlink函數(shù)。它會(huì)告訴你符號連接指向的地方,如果參數(shù)不是符號連接其返回undef:my$where=readlink"carroll”;#得到“dodgson”my$perl=readlink"/usr/local/bin/perl”#可能得到Perl放置的地方my$name="fred”;my$permissions=“0755”;#危險(xiǎn)…不能工作mkdir$name,$permissions;mkdir$name,oct($permissions);你可以使用chown函數(shù)改變一批文件的所有者及所在的組my$now=time;my$ago=$now-24*60*60;#一天的秒數(shù)utime$now,$ago,glob"*”;#設(shè)成當(dāng)前訪問的,一天之前修改的my$stuff="Howdyworld!”;my$where1=index($stuff,"w”);#$where1得到2my$where2=index($stuff,“w”,$where+1);#$where得到6my$where3=index($stuff,“w”,$where+1);#$where為-1(沒有找到)my$fred="Yabbadabbadoo!”;my$where1=rindex($fred,“abba”);#$where1得到7my$where2=rindex($fred,“abba”,$where-1);#$where2得到1my$where3=rindex($fred,“abba”,$where2-1);#$whrere3得到-1$part=substr($string,$initial_position,$length);它有三個(gè)參數(shù):一個(gè)字符串,一個(gè)從0開始編號的初始位置(類似于index的返回值),以及子串的長度。返回值是一個(gè)子串:my$rock=substr“FredJ.Flintstone”,13,1000;#得到“stone”在上例中,如果請求的長度(例子中為,1000)超過了字符串的長度,Perl不會(huì)有任何抱怨信息,但得到的是一個(gè)比你所希望的更短的結(jié)果。如果想明確要求到達(dá)字符串的結(jié)尾處,無論其或長或短,可以像下例那樣省略掉第三個(gè)參數(shù)(參數(shù)):my$pebble=substr“FredJ.Flintsone”,13;#得到“stone”初始位置可以是負(fù)的,表示從字符串結(jié)尾處開始(此時(shí),-1表示最后一個(gè)字符)?。在下例中,位置-3表示倒數(shù)第三個(gè)字符的位置,也就是字符i的位置:my$$long=“someveryverylongstring”;my$right=substr($long,index($long,"l”));my$string=“Hello,world!”;substr($string,0,5)="Goodbye”;#$string現(xiàn)在變成了“Goodbye,world!”除了給substr賦值外(第一次看起來有些怪異),也可以用更傳統(tǒng)的方法?來使用susbtr:使用4個(gè)參數(shù),第四個(gè)參數(shù)是替換的字符串:?按照慣例,我們的意思是“函數(shù)調(diào)用”的觀點(diǎn),而不是Perl”的觀點(diǎn),因?yàn)檫@個(gè)功能在Perl的早期就有了。my$previous_value=substr($string,0,5,“Goodbye”);subbig_money{my$number=sprintf“%.2f”,shift@_;#在do-nothing循環(huán)中,每一次加入一個(gè)逗號1while$number=~s/"(-?\d+)(\d\d\d)/$1,$2/;(#這個(gè)1,這是沒有用的。順便提一句,Perl會(huì)優(yōu)化這個(gè)常值表達(dá)式,使之不占用任何運(yùn)行時(shí)間。)#將美元符號放入合適的位置$number=~s/"(-?)/$1\$/;$number;}要使用一個(gè)排序子程序,將它(不使用&)放在關(guān)鍵字sort和你要排序的列表之間。這個(gè)例子將一列數(shù)字按照數(shù)字順序?qū)⑵渑判?,并將結(jié)果放入?result中:my?result=sortby_number@some_numbers;subby_number{$a<=>$b}比較數(shù)字subby_char{$acmp$b}比較字符my?numbers=sort{$a<=>$b}@some_numbers;my?descending=reversesort{$a<=>$b}@some_numbers這里有一個(gè)技巧。比較操作符(<=>和cmp)是很“近視的”,它們不知道哪一個(gè)操作數(shù)是$a,哪一個(gè)是$b。它們只知道哪一個(gè)值在左邊,哪一個(gè)在右邊。如果$a和$b交換位置,比較操作符每一次得到的結(jié)果則是相反的。這意味著另一種得到逆序的方式:my?descending=sort{$b<=>$a}@some_nubmers;因?yàn)閞everse被當(dāng)作sort的一個(gè)修飾符,特殊的簡寫方式阻止你使用一種方式排序但得到的卻是另一種結(jié)果。==============================================================my%score=(“barney”=>,“fred”=>205,“dino”=>30);my?winners=sortby_scorekeys%score;實(shí)際上并不能根據(jù)score對hash進(jìn)行排序;這只是文字上的簡寫。你不能對hash排序。我們在前面的hashes中使用sort時(shí),只是對hash的keys排序(按照字母表順序(ASCIIbetical)排序)?,F(xiàn)在我們將對hash的keys排序,其順序由其對應(yīng)的hash中的值決定。此時(shí),結(jié)果是根據(jù)保齡球的成績這三人的名字的有序列表,。寫出這個(gè)排序子程序是非常容易的。我們需要的是針對score而不是名字,使用數(shù)字比較。不是比較$2和$b(選手的名字),我們想比較$score($a)和$、。。昨($3(它們的成績)。如果你這樣思考,答案則呼之欲出,如下:subby_socre{$score{$b}<=>$score{$a}}讓我們仔細(xì)的分析它,看看它是如何工作的。想象第一次調(diào)用它時(shí),Perl給$2賦值barney,給$b賦值fred。比較是$score{"fred”}<=>$score{"barney”},它是(通過hash得到)205<=>195。<=>是“近視的”,因此它發(fā)現(xiàn)205在195之前,則說:“不,這不是正確的順序;$b應(yīng)當(dāng)在$a之前。這告訴Perlfred應(yīng)當(dāng)在barney之前。可能下一次調(diào)用子程序時(shí),$a是barney,而$b是dino?!敖暤摹睌?shù)字比較符看到的是30<=>195,因此報(bào)告它們是正確的順序:$a確實(shí)是在$b之前。因此,barney在dino之前。此刻,Perl有了足夠的信息來得到列表的順序:fred是勝利者,barney第二名,而dino第三。為什么比較運(yùn)算中$score{$b}在$,方昨{$3}之前,而非別的方式?因?yàn)槲覀兿氚幢}g球成績的降序排列,從最高成績依次向下。你可以(經(jīng)過一些訓(xùn)練)一眼就能讀懂這些代碼:$score{$b}<=>$score{$a}的意思是根據(jù)score,將它們按照數(shù)字逆序排序。my%score={“barney”=>95,“fred”=>205,“dino”=>30,“bam-bamm”=>195;};bam-bamm和barney的成績相同。哪一人應(yīng)該排在前面呢。my?winners=sortby_score_and_namekeys%score;subby_score_and_name{$score{$b}<=>$score{$
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工傷糾紛合同范本
- 地磅聘用合同范本簡單版
- 事故案例內(nèi)容
- 書面企業(yè)合同范本
- 解除購車合同范本
- 銀屑病的生物制劑
- 余熱煙量供應(yīng)合同范本
- 動(dòng)漫行業(yè)合同范本
- 稱重軟件合同范本
- 旅游項(xiàng)目策劃方案
- 修剪指甲培智五年級上冊生活適應(yīng)教案
- 計(jì)算機(jī)信息系統(tǒng)災(zāi)難恢復(fù)計(jì)劃(完整版)資料
- 腳手架搭設(shè)及基本知識教程課件
- 煙花爆竹安全管理?xiàng)l例課件
- 大學(xué)C語言設(shè)計(jì)冒泡排序和選擇排序課件
- 一些液體的導(dǎo)熱系數(shù)
- 高毒力肺炎克雷伯菌感染
- 篆刻學(xué)ppt精品課件
- 茶多酚的保健功能及在食品中的應(yīng)用
- 小學(xué)科學(xué)實(shí)驗(yàn)說課探究斜面的作用市公開課金獎(jiǎng)市賽課一等獎(jiǎng)?wù)n件
- 中職教師技能大賽 建筑CAD 試題
評論
0/150
提交評論