久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

第15天接觸perl的人必讀之文

 Tlexander 2010-08-10

最 近接到一個任務是這樣的,一臺Solaris服務器上需要運行一個腳本,,每天統(tǒng)計MySQL數(shù)據(jù)庫中的數(shù)據(jù)并生成報表,。本來這是一個可以就事論事的小項 目,但是為了以后的靈活和可擴展性,,我設計了一個使用XML做統(tǒng)計模版配置的方案,。由于在Bash下不太好實現(xiàn)XML的訪問,因此我考慮用Perl來實現(xiàn) 這個腳本,。

  Perl是一個強大的腳本語言,,本來是設計應用在文本處理方面的,但是后來發(fā)展的越來越強大,,已經(jīng)可以處理網(wǎng)絡、圖形,、系統(tǒng),、文件等等各個方面 的內容。Perl本身內置了豐富的操作符和函數(shù),,外部也有多年積累下來的大量模塊,。但是不知道什么原因在國內好像很少有人用。關于Perl的歷史我就不多 說了,有興趣可以上網(wǎng)查一下,。有一點要說的是,,目前Perl最新的版本是5.8.6,而Perl6雖然已經(jīng)設計很久了但是由于自舉問題目前還沒有一個可用 的版本,。為了解決這個問題,,臺灣的唐宗漢發(fā)起的Pugs項目正在快速的實施中,可能很快就能有結果了,,有興趣的朋友可以多多關注一下,,也許還可以為開源世 界做點貢獻。

  雖然很早以前就了解過Perl,,但是從來就沒有實際的用它做過項目,,因此這次的實現(xiàn)是一個邊學邊做的過程。作為一個程序員,,學習一種新的語言總 會有一點慣性思維,,加之Perl在語法上與C語言比較類似。因此我想在這片文章中主要以C為背景做一個比較,。這種比較不是比較語言上的優(yōu)劣,,而是說明同樣 的功能如何在Perl中實現(xiàn)以及之間的區(qū)別。限于篇幅,,具體的技術實現(xiàn)的細節(jié)我就不在這里多說了,,你可以在末尾的資源一節(jié)中找到很多相關的文章。如果你沒 有接觸過Perl,,我想你可能更希望看到學習Perl的過程中可能會遇到的一些問題以及解決方法,。

工欲善其事,必先利其器

  要寫代碼,,首先至少得有一個編輯器,。Perl是跨平臺的一種解釋型語言,可以在Unix/Linux/Windows/Mac等平臺上運行,。具 體對應平臺上的編輯器,,最簡單的方案是Unix下用vi,Windows下用UltraEdit,。當然也有商業(yè)化的IDE,,不過我嘗試了一下發(fā)現(xiàn)并不是那 么的好用,因此我在Windows平臺上以UltraEdit作為編輯環(huán)境,,完成后移植到Solaris平臺上,。

  關于環(huán)境的搭建,有這樣幾個需要注意的地方:

  1,、 Windows平臺下對應的是ActivePerl,,可以免費下載。

  2、 去UE的網(wǎng)站上下載Perl的AutoComp文件,,可以實現(xiàn)自動完成功能,。

  3、 下載Perl對應的語法加亮的Tag文件并加入到UE中,,可以更塊的發(fā)現(xiàn)拼寫錯誤,。

  4、 在UE設置一個快捷工具,,命令行為C:\Perl\bin\perl.exe "%F"(捕獲輸出),,可以實現(xiàn)快速運行并顯示結果。

  5,、 如果你不喜歡UE,,那么我推薦Source Insight


芝麻開門

  說起編程語言,簡單的來說無非就是這樣幾個必不可少的基本元素:變量,、數(shù)據(jù),、表達式、流程控制語句(包括條件,、分支,、循環(huán))、函數(shù),、對象,。具體到語言上,大部分的內容只是表達的形式不同而已,。而Perl與C又有什么區(qū)別呢,?

  首先要知道,Perl是一種腳本語言,。所謂的腳本,,就是沒有主函數(shù),從最開始一行一行的按照順序解釋執(zhí)行(老版Basic不也是如此嗎),。因此,,盡管把你的思路轉化為流程用Perl表達出來吧。

  其次,,Perl的設計中參考了很多語言的長處,,并避免了設計上的缺陷。因此Perl的很多語法你可能都會覺得似曾相識,。我把Perl的語法總結 了一下,,和C語言做了一個簡單的對比表格。表格左右兩邊的語句是C和Perl對應表達同一個功能各自的不同方式,。如果讀者有C語言的經(jīng)驗,相信看到這個對 比可以很快的上手吧?

語法元素

C Perl

Perl語法說明

注釋

/* … */

# …

只支持單行注釋

變量

int a, b, c;

char c=’A’;

int x[10];

my ($a, $b, $c);

my $c='A';

my @x;

my %h;

聲明使用my標示

表示值的變量以$開頭,,表示數(shù)組的變量以@開頭,,表示哈希表的變量以%開頭。

聲明可以省略(不建議)

字符串

char* h1=”hello\n”;

char* h2=”hello\\n”;

$h1=”hello\n”;

$h2=’hello\n’;

雙引號解釋內部的\n,,而單引號則不解釋

一維數(shù)組

int arr[10];

arr[0]=0;

for(i=0;i<10;i++)

arr[i]=i;

my @arr;

$arr[0]=0;

@arr[3..5]=(3..5);

數(shù)組聲明以@標示

動態(tài)數(shù)組,,不需要指定大小

數(shù)組下標從0開始

訪問數(shù)組元素值的時候,要以$開頭表示訪問的是數(shù)值

[3..5]表示數(shù)組中下標為35之間的元素組成的數(shù)組

數(shù)組之間可以直接賦值

多維數(shù)組

int arr[10][10];

arr[0][1]=9;

my @arr;

$arr[0][1]=9;

Perl并不直接支持多維數(shù)組,,而是以數(shù)組引用的方式間接支持,。例如arr[0]的內容就是一個數(shù)組的引用地址。

指針

char c;

int* x=&c;

c='a';

printf(*x);

my $c;

my $x=\$c;

$c='a';

print $x;

\C中的&類似,,意思是取引用

 

void hello() {

printf(“Hello\n”);

}

void (*hi)()=hello;

(*p)();

sub hello{

       print "Hello\n";

}

my $hi = *hello;

&$hi;

&表示調用函數(shù)

*取函數(shù)的代碼地址

不必用括號把參數(shù)括起來

調用時的括號也是可選的

條件語句

if (x>0) x=0;

x>0 ? x=0 : ;

if ($x>0) { $x=0; }

$x=0 if $x>0;

$x=0 unless $x<=0;

$x>0 ? $x=0 : ;

if 結構可以反轉,,意義不變,注意前句沒有分號,。

顧名思義, unless是“除非”的意思,。這里的四個表達方式是等價的。注意第一種方式中,,條件部分的圓括號和語句部分的花括號是不可省略的,。

循環(huán)語句

foreach (@arry)

foreach my $key(@ary)

foreach $count (1..10)

for/while的語法都和C類似。

foreach關鍵字也可以用for,,意義不變,。

函數(shù)

int max(int x, int y)

{

return x>y?x:y;

}

int n=max(1,2);

sub max

{

       my ($x, $y)=@_;

       return $x>$y?$x:$y;

}

my $n=max(1,2)

注意下劃線”_”也是一個合法的變量名。而@_Perl內置的一個數(shù)組,,內容為函數(shù)的參數(shù),。

my ($x, $y) 表示聲明了一個有兩個元素的數(shù)組,并將兩個元素映射到$x$y上,。

($x,$y)=@_;則表示兩個數(shù)組之間的復制,,@_中對應的元素的值就賦值給了$x$y.這是一個簡便的寫法,也可以這樣寫

my $x=$_[0]; my $y=$_[1];

return是可選的,,默認返回最后一個表達式的值

語法約束

1.       編譯時打開編譯器所有的警告選項

2.       使用lint工具

 

3.       perl –w myprogram.pl 打開運行警告開關,,如果運行時Perl檢查到了可能的錯誤,會顯示警告信息,,否則它默認是什么也不提示繼續(xù)執(zhí)行,。

4.       #!/usr/bin/perl –w 在代碼文件第一行中加入-w選項開關

5.       use strict; 使用嚴格語法約束

運行

編譯后直接執(zhí)行

 

1.       perl myprogram.pl 手工執(zhí)行

2.       #!/usr/bin/perl

Unix下在代碼第一行加入,然后給文件加上可執(zhí)行的屬性 chmod +x myprogram.pl,,之后就可以用./myprogram.pl命令來運行,。

3.       Windows下,安裝ActivePerl的時候,,已經(jīng)將.pl后綴的文件和perl的解釋程序關聯(lián)起來了,,因此直接雙擊文件圖標就可以運行,。


需要說明的是,在Perl的世界中有一句名言“條條大路通羅馬”,, 這句話的意思是說同樣一件事情Perl允許你用很多種不同的方式去做,。因此上表的例子風格是按照C的習慣來寫的,并且為了簡化起見,,只是挑選了與C相似的 內容,。事實上,Perl包含了很多C沒有的東西,,例如內置的Hash表,、隊列、正則表達式,、格式定義等等,。


從框架開始
Perl有很多表達方式,我們可以選擇一種自己熟悉,、容易理解的方式來寫Perl的程序,。例如,你是一個經(jīng)驗豐富的C程序員,,那么你可以選擇以C的風格來寫Perl程序,。下面是一個小小的樣板框架


#!/usr/bin/perl -w

use strict;


# 程序開始的第一行語句,調用main函數(shù)

main();


# 定義main函數(shù)

sub main

{

}

  在這個框架下面,,你幾乎可以容易就開始你的Perl開發(fā)了,。如果需要處理命令行參數(shù),就可以稍微的擴展一下這個框架,。
#!/usr/bin/perl -w

use strict;

use Getopt::Std;

main();


my $configfile;


sub ProcessOptions

{

my $VERSION = '1.0.0';

my $USAGE = "pp.pl [-v | -c configfile]\n";

my $opts={};

die $USAGE unless( getopts("c:v", $opts) );

die $VERSION if ($opts->{'v'});

$configfile=$opts->{'c'} ? $opts->{'c'} : 'config.xml' ;

}


sub main

{

ProcessOptions();

print $configfile;

}

  實際上,,剩余的工作和以往的工作差不多了,編寫一個一個的函數(shù),,并實現(xiàn)你的業(yè)務邏輯,。對于你這樣一個聰明的程序員來說,學會Perl是一個很容易的事情,。


常見問題
以我的學習經(jīng)驗來看,,在開發(fā)的過程中可能有一些常用但是很分散的細節(jié)問題會讓你感到困惑。

  1,、 程序的入口參數(shù)怎么?。?/p>

  內置數(shù)組@ARGV包含了所有的運行參數(shù),??梢源蛴〕鰜砜纯?print @ARGV;

  2、 函數(shù)如何傳參數(shù),、取參數(shù),?

  每個函數(shù)內部都有一個內置的數(shù)組 @_ ,,這個數(shù)組的元素就是函數(shù)的參數(shù)。例如傳入的第一個參數(shù)就是$_[0],,第二個是$_[1],。唔,如你所見,,Perl的函數(shù)參數(shù)就是C中的動態(tài)參數(shù)。

  3,、 默認變量是什么

  這個可能會把你的頭搞暈,。有一個內置變量 $_ ,

  4,、 顯示消息,、退出常見的簡單寫法
die ‘Error on program’;

  也可以在條件不滿足的情況下使用
die ‘Configuration error’ unless($doc->getDocumentElement);

  5、 格式化輸出

  可以用簡單的print語句進行一般的輸出操作,,如果需要復雜的格式化輸出,,可以使用printf語句……跟C的用法幾乎是一樣的。
printf("pi=%.6f", 355/113);

  6,、 =>是什么東西?

  在使用Hash表的時候,,可以經(jīng)常看到=>這個符號,。例如這樣的一個定義:
my $account={

  'Simon'=> '[email protected]',

  'Jesse'=> '[email protected]'

  };

  其實,,=>符號跟逗號”,”是等價的。Perl里面的Hash表事實上是一個數(shù)組,,只是把奇數(shù)位元素看做是Key(鍵),,而把偶數(shù)位的元素看做是Value(值)。

  7,、 關于引用的一點說明

  Perl的引用類似C的指針,,所謂的引用事實上就是地址。取一個變量的地址用反斜杠”\”操作符,,例如 $p=\$x; 那么$p就是一個指向$x變量的指針,。要引用指針的值,使用”$”操作符,,例如 print $$p; 就是打印$x的值,。

  引用不單單可以引用變量,也可以引用數(shù)組,、HASH表,、函數(shù),取函數(shù)的地址可以使用*操作符,。

還能做什么
Perl作為一個功能強大的腳本語言,,可以應用在Web 編程,、數(shù)據(jù)庫、XML,、系統(tǒng)管理,、圖形圖像、自然語言,、壓縮,、加密、郵件系統(tǒng),、軟件測試等各個地方,。在CPAN上,你可以找到各種各樣你所需要的模塊支持,。例如,,你可以:

  編寫系統(tǒng)管理的腳本

  和Apache結合起來,編寫CGI程序

  編寫動態(tài)網(wǎng)頁

  使用Net命名空間下的類編寫網(wǎng)絡應用程序

  使用Authen::Captcha模塊實現(xiàn)提交時的驗證碼的功能

  使用Storable模塊處理Perl的各種數(shù)據(jù)結構

  使用GD/Image::MagicK模塊處理圖形

  等等…

    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多