• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Perl的簡單語法(與C語言語法的異同)

    發表于:2007-06-11來源:作者:點擊數: 標簽:
    1 基本輸入輸出 在 BASH 腳本程序中,我們用 read var 來實現從鍵盤的輸入,用 echo $var 來實現輸出。那么在 Perl 中將有一點變化。Perl 中將標準輸入用關鍵詞 表示;標準輸出用 表示,標準錯誤輸出用 表示。故而從標準輸入讀取數據可以寫成: $var= ; # 讀

    1 基本輸入輸出

    在 BASH 腳本程序中,我們用 read var 來實現從鍵盤的輸入,用 echo $var 來實現輸出。那么在 Perl 中將有一點變化。Perl 中將標準輸入用關鍵詞 表示;標準輸出用 表示,標準錯誤輸出用 表示。故而從標準輸入讀取數據可以寫成:

    $var=; # 讀取一行輸入,并存入變量 $var 中。

    @var=; # 讀取多行輸入,并存入數組 @var 中。

    在 Perl 語言中,變量 $_ 是許多操作符的缺省變量。因此如果需要讀入許多行并對每行分別處理一般這樣寫:

     while($_=){

    chop($_); # chop 調用用于去掉 $_ 變量中的最后一個字符(換行符)。

    # 處理$_(每一行)

     }

    或者可以簡寫為:

     while(){

    chop; # 等同于chop($_)

    # 處理$_(每一行)

     }

    如果 <> 括號之間沒有任何字符,則表示從命令行所指示的文件中讀取數據,看下面這個例子(read.pl):

     #!/usr/bin/perl;

     while(<>){

    print $_;

     }

    如果在命令行輸入 $ perl read.pl read.pl 。這個程序將在屏幕上打印出文件 read.pl 的每一行。

    在前面的例子中我們已經看見,Perl 語言中向標準輸出輸出數據可以用 print 語句。我們在 print 語句中可以輸出多個變量,變量之間用 "," 分隔開來。如下面的例子:

     print 3,45*2,"hello",2+2;

    上面的輸出語句將給出 "390hello4" 的輸出結果。

    除了 print 語句以外,Perl 中還提供了一個 printf 語句用于標準輸出,不過 printf 更接近于 C 語言的 printf 函數,可以進行格式化的輸出,如:

     printf "%10s% 8d%8.2f\n",$a,$b,$c;

     printf("%10s% 8d%8.2f\n",$a,$b,$c); # 加上括號的 C 語言寫法也是可以的。

    另外 print 和 printf 在輸出數組變量的時候也是不同的,如下例:

    @a = (1 , 2, 3);

    printf @a;

    print "\n";

    print @a;

    print "\n";

    輸出的結果是:

    1

    123

    如果在 @a 兩邊加上 "" ,則輸出就都是 123了。

    2   分支循環控制結構

    if 語法

    Perl 語言的 if...then...else... 語句結構和 C 語言非常相似,該結構一共有三種變種,分別如下:

    if 語法 1:

    if(判別運算式)

    {

    表達式為真時的語句塊;

    }

    或寫成:表達式為真時的語句 if (判別運算式);

    實例為:print "您的分數及格了!\n" if ($score>=60);

    if 語法 2:

    if(判別運算式一){

    判別式一為真時的語句塊;

    }else{

    判別式一為假時的語句塊;

    }

    if 語法 3:

    if (判別運算式一)

    {

    判別式一為真時的語句塊;

    }elsif(判別運算式二){

    判別式二為真時的語句塊;

    }elsif(判別運算式三){

    判別式三為真時的語句塊;

    }else{

    所有判別式為假時的語句塊;

    }

    unless 語法

    unless的含義就是說“如果判別式不為真,就執行...”。

    unless 語法 1:

    unless(判別運算式) {

    判別式為假時語句塊;

    }

    或寫為:判別式為假時語句 unless (判別運算式);

    unless 語法 2:

    unless(判別運算式)

    {

    判別式為假時語句塊;

    }else{

    判別式為真時語句塊;

    }

    進階技巧:"&&"、"||" 及 "? :"

    這些符號看上去像標點符號,或是表達式的一部分。和 C 語言中一樣,他們在 Perl 語言中也可作為控制結構,而且更簡潔,只是可讀性差了很多。

    比如說:

     if (判別表達式) {為真時語句塊};

    也可以寫為:

     判別表達式 && 為真時的語句塊

    同樣道理,unless(this){that} 可替換為 this||that。

    ? : 則可以這樣使用:

    exp1?exp2:exp3

    這個式子表示:如果 exp1 為真則求 exp2 的值,否則求 exp3 的值。

    while 循環語法

    Perl 語言中 while, do...while, for, until, foreach 均可以用于實現循環結構,循環中還可以用 last,next,redo 等操作符進行控制。下面我們先介紹 while 語法。

    while(判別運算式) {

    程序敘述區塊;

    }

    上個語法在Perl中也可以寫成: 程序敘述區塊 while(判別運算式);

    do...while 循環語法

    do

    {

    程序敘述區塊;

    }while(判別運算式);

    在 while 和 do while 循環最大的區別是在 do while 循環中,循環體至少會被執行一次。

    until 循環語法

    until(判別運算式)

    {

    程序敘述區塊;

    }

    上個語法在Perl中也可以寫成: 程序敘述區塊 until (判別運算式);

    do...until 循環語法

    do{

    程序敘述區塊;

    }until (判別運算式);

    for 循環語法

    for (初始化運算式;判別運算式;循環過程運算式)

    {

    程序敘述區塊;

    }

    或者

    for $variable(@array)

    {

    程序敘述區塊;

    }

    第二個語法中如果把 $variable 變量省略的話,就會將數組 @array 的元素一個一個指定給 $_ 這個變量,這是比較精簡的寫法。其中第一個語法更接近于 C 語言的語法。

    foreach 循環語法

    foreach $variable(@array)

    {

    程序敘述區塊;

    }

    如果把$variable變量省略的話,就會將數組@array的元素一一指定給$_這個內定的輸出變量.

    last 退出循環語法

    范例:

    for($i=1;$i<=10;$i++)

    {

    last if ($i==5); # 如果 $i 等于5的話就退出 for 循環

    print"$i\n";

    }

    next 繼續循環語法

    范例:

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

    {

    # 如果是 2 的倍數的話,就到循環的下一個陳述

    next if($i%2)==0)

    print"$i是一個奇數!\n";

    }

    3   函數

    Perl 語言中有兩種函數,一種是 Perl 自帶的一些實用系統函數,如文件打開函數 open 等;另一種是用戶自定義的函數,用戶通過自己定義函數可以使得程序的結構化更加清晰。

    用戶函數又稱子程序(Subroutine),在 Perl 中用下面的結構來定義用戶函數:

    sub 子程序名{

     語句塊;

    }



    這里的子程序名與變量的取名規則類似。

    與 BASH 程序不同,Perl 中的用戶函數的定義可以位于程序的任何位置,比如說放在文件的未尾,而并不需要放在調用該函數的代碼之前。如果兩個子程序使用了相同的程序名,位置靠后的子程序將覆蓋前面子程序。

    需要注意的是用戶函數中的變量默認為全局變量,并不是像 C 語言中那樣是局部變量,Perl 函數中的變量可以被其他程序段共享。如果希望定義局部變量,可以用下面兩種方法來實現:

    local($a);

    my $a;



    另外用戶函數的調用:通過在子程序前加“&”符號才可以,函數可在任一表達式內被調用。函數調用可以嵌套,即子程序中可以再調用另外的子程序,即可以程序員可以用 Perl 寫出具有遞歸特性的代碼。

    調用用戶函數產生的結果稱為返回值(return value)。返回值是每次函數被執行時,最后一個被執行到的表達式的計算結果。如:

    sub add_a_b{

    $a+$b;

    }



    函數最后一條表達式為 $a+$b,故返回值為 $a+$b 的計算結果。以下是調用情況:

    $a = 5;

    $b = 6;

    $c = &add_a_b; # $c 的值為 11

    $d = 5 * &add_a_b; # $d 的值為 5*11,即 55



    還有一個問題是,在 Perl 程序中如何向函數中傳遞參數呢?這是可以實現的,調用函數時,可以將參數依次放在函數名后面的 "()" 中,而在函數體中,系統默認數組 @_ 中就按同樣順序存放著所有的參數。我們可以訪問 @_ 變量,從而確定參數的個數及其數值。

    仍以加法函數為例:

    sub add_a_b{

    $_[0]+$_[1];

    }

    $c=&add_a_b(5,6); #$c的值為11

    $d=5*&add_a_b(2,3); #d的值為5*5即25



    更為奇特的是,這種方式可以實現變參數傳遞,即參數個數不確定的傳遞。C 語言也可以實現這種傳遞,如我們熟悉的 printf 函數,只是他們的實現機制不太一樣,C 更深奧一些,此處就不多解釋了。

    sub add_all{

    $sum=0; #將sum初始化

    foreach $_(@_) { #遍歷參數列表

    $sum+=$_; #累加每個元素

    }

    $sum; #返回sum即總和的值

    }

    $a=&add_all(3,4,5); #$a的值為3+4+5即12

    $d=2*&add_all(1,2,3,4,5); #d的值為2*15即30


    4    常用系統調用

    下面將介紹一些 Perl 自身提供的一些標準系統函數,這些函數包括: print 、printf 、chop 、split 、keys 、values 、reverse 、sort 、length 、substr 、index 、push 、pop 、unshift 、shift 、join 、grep 、hex 、rand 、localtime 、die 、open 、close 、pack 、read 、exit。下面就來分別介紹他們。


    指令:print

    語法:print Filehandle LIST

    說明:這個 Filehandle 可以看作在 I(INPUT)/O(OUTPUT) 之間的一個橋梁,可以利用 FILEHANDLE 來做出數據讀入寫出的動作。STDIN 是代表從哪里輸入數據,例如從電腦的鍵盤輸入;STDOUT是代表從哪里輸出數據,例如從電腦的屏幕輸出;STDERR 是代表從哪里輸出錯誤的數據,例如從電腦的屏幕輸出。而在PERL語言中有三個標準FILEHANDLE:

    1. STDIN(標準輸入):是代表 STDIN 的 FILEHANDLE

    2. STDOUT(標準輸出):是代表 STDOUT 的 FILEHANDLE

    3. STDERR(標準錯誤輸出):是代表 STDERR 的 FILEHANDLE

    如果要使用其他 FILEHANDLE 的時候,就要先用 OPEN 這個函數來打開一個 FILEHANDLE,我們可以用 PRINT 這個函數將 LIST 中的數據輸出給 FILEHANDLE。

    語法: print LIST

    說明: 如果省略 Filehandle 的話,就會把 Filehandle 默認為 STDOUT。也就是會將 LIST 的數據內容顯示在終端屏幕上。

    語法: print

    說明: 同時省略 Filehandle 和 LIST 的話,就會以 STDOUT 為 Filehandle,并會輸出 $_ 這個系統內部變量的數據內容。如果 $_ 變量是一個空字符串的話,就會顯示出一個空字符串。


    指令: printf

    語法: printf Filehandle LIST

    說明: 在 Perl 語言中也提代 C 語言中 printf 的語法,用法和 C 語言中的用法一模一樣。如果把 Filehandle 省略的話,也一樣會把 STDOUT 當成是默認的 Filehandle。

    示例

    printf("chomod %d %s\n","711""cgi"); 會將chmod 711 cgi加上換行顯示于屏幕上。


    指令:chop 語法:chop($url)

    說明:把最后一個字符刪除。

    示例

    $url="www.aka.org.cn/; chop($url);

    這時$url="www.aka.org.cn" 還可以簡寫成 chop($url="www.aka.org.cn/"); chop 函數一般用于去掉從鍵盤讀入數據中的最后一個換行符。


    指令:split

    語法:split(/pattern/,$text,limit) 其中/pattern/是文字處理的模式,而limit是代表要分割的個數,一般可以省略。

    說明:用一個指定的文字處理模式來分割 $text 字符串。

    示例

    $text="Michael,Gevin,Mike"; @name=split(/,/,$text); # 這時 @name=("Michael","Gevin","Mike");

    @name=split(/,/,$text,2); # 這時 @name=("Michael","Gevin");

    在傳送CGI應用程序數據的時候會先將數據編碼,其中會將FORM中第個數據字段 的數據內容用&這個符號隔開,所以在解碼的時候就要以 "&" 這個符號為分割的字符,將每個數據字段分割出。而數據字段的名稱和這個數據字段的值是用=這個符號來隔開,如果想取得數據字段的名稱和所對應的值的話,就用要 "=" 這個符號來分割數據字段,


    指令:keys

    語法:keys(%array)

    說明:取出關聯數組 %ARRAY 中全部的 key。

    示例

    %NAME=(1,"mike",2,"michael"); @readkey=keys(%NAMES); # 這時 @readkey=(1,2);


    指令:values

    語法:values(%array)

    說明:取出關聯數組 %ARRAY 中全部的 value。

    示例

    %NAMES=(1,"mike",2,"michael"); @readval=values(%NAMES); #這時 @readval=("mike","michael");


    指令:reverse

    語法:reverse(@array)

    說明:將數組 @array 中的元素由后到前重新排列。

    示例

    @back=("A","B","C","D","E"); @back=reverse(@back); # 這時 @back=("E","D","C","B","A");


    指令:sort

    語法:sort(@array)

    說明:將數組中的元素由小到大排序,如果要由大到小排序的話,要加上reverse這個函數。

    示例

    @abc=("d","b","c","a"); @abc=sort(@abc); # 這時 @abc=("a","b","c","d");

    @abc=(reverse sort@abc); # 這時@abc=("d","c","b","a"); 這個語法也可以寫成 @abc=(reverse sort(@abc));

    @number=(5,2,10); @number=sort(@number);

    # 上面示例用sort函數來排序數值的時,會出差錯,因此要用下面到下面這一句。

    @number=(sort{$a<=>$b}@number); # 這時 @number=(2,5,10);


    指令:length

    語法:length($string)

    說明:求出字符串$string的字節(bytes)值。

    示例

    $string="Perl5"; $size=length($string); # 這時 $size=5;


    指令:substr

    語法:substr($string,offset,length) offset代表起始字符的位置,length代表引用的字符串長度,如果省略length則代表從起始值到字符串的最后一個字符長度。而offset如果是負值的話,就會從字符串右邊開始指定字符。

    示例

    $s=substr("perl5",2,2); # 這時 $s="rl";

    $s=substr("perl5",2); # 這時 $s="rl5";

    $s=substr("perl5",-2,2); # 這時 $s="er";


    指令:index

    語法:index($string,$substring,position) $substring是要尋找的字符;position代表從哪一個位置開始尋找,假如省略position就從頭開始找起。

    說明:返回所要找尋的字符在一字符串$string中的位置,如果在字符串中找不到字符的話,則會返回-1這個 值。

    示例

    $s=index("perl5","p"); # 這時 $s=0

    $s=index("perl5","l",2); # 這時 $s=3

    $s=index("perl5","perl"); # 這時 $s=-1


    指令:push

    語法:push(@array,$string)

    說明:在數組@array的最后附加新的元素 ($string)到數組@array中。

    示例

    @array=("one","two"); push(@array,"three"); # 這時 @array=("one","two","three")


    指令:pop

    語法:pop(@array)

    說明:將數組(@array)的最后一個元素刪除,并將刪除的元素返回。

    示例

    @array=("one","two"); $rm=pop(@array); # 這時 @array=("one");而$rm="two";


    指令:unshift

    語法:unshift(@array,$string)

    說明:在數組@array的第一個元素前附加新的元素$string到數組@array中。

    示例


    @array=("one","two"); unshift(@array,"three"); # 這時 @array=("three","one","two")


    指令:shift

    語法:shift(@array)

    說明:將數組@array的第一個元素刪除,并將刪除的元素返回。

    示例

    @array=("one","two"); @rm=shift(@array); # 這時 @array=("two");而$rm="one";


    指令:join

    語法:join($string,@array)

    說明:在一數組@array的元素之間加上一指定的字符$string,并將結果返回。

    示例

    @array=("one","two","three");

    $total=join(":",@array); 這時 $total="one:two:three";


    指令:grep

    語法:grep(/pattern/,@array)

    說明:將合文字處理模式(regular expression)的數組元素找出來。

    示例

    @array=("one","on","in");

    $count=grep(/on/,@array); # 這時 $count=2

    @result=grep(/on/,@array); # 這時 @result=("one","on");


    指令:hex

    語法:hex($string)

    說明:將十六進制的數值轉成十進制。

    示例

    $decimal=hex("ff"); 這時 $decimal=255;


    指令:rand

    語法:rand($interger)

    說明:常和函數srand搭配來取得一隨機數,如果沒有先宣告stand函數的話,則取出的常數值是一個固定值。這個語法會返回一個介于 0 和$interger之間的數值,如果$interger省略的話,則會返回一個介于 0 和 1 的數值。

    示例

    srand; # 要先調用一次srand函數,才能產生隨機數的效果

    $int=rand(10); # $int的值會大于 0 而且小于 10 ,如果希望產生的亂數是整數的話,就要再加上int 這個函數,如下

    $int=int(rand(10)); # $int的值是一個整數,且值在 0 和 9 之間


    指令:localtime

    語法:localtime(time)

    說明:可返回九個有關時間的元素,在寫CGI應用程序的時候常會用到系統的時間,所以在此會詳細介紹這個函數的用法。

    示例

    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);

    其中: $sec 代表秒數 [0,59]、$min 代表分數 [0,59]、$hour 代表小時數 [0,23]、$mday 代表是在這個月的第幾天 [1,31]、$mon 代表月數 [0,11] 因此要將 $mon 加 1 之后,才能符合實際情況、$year 從 1990 年算起的年數、$wday 從星期六算起,代表是在這周中的第幾天 [0-6]、$yday 從一月一日算起,代表是在這年中的第幾天 [0,366]、$isdst 只是一個 flag 知道這些變量之后,就可以在 CGI 應用程序中拿來應用了。

    此外,也可以用下面這一行指令在 UNIX 系統下取得系統的時間。為了避免錯誤發生,最好用絕對路徑的方法來取得系統時間,如果絕對路徑不清楚的話可以用 "which data" 這個指令來得知。$data='/usr/bin/data'; 而在 Perl 5 版本中,也可以用下面這一行指令來取得系統時間。 $data=localtime(time);


    指令:die

    語法:die LIST

    說明:會把LIST字符串顯示出來,并退出程序。常常和 $! 這個代表錯誤信息變量一起使用。

    示例

    open(FILE,"$filename")||die "不能打開文件$!\n; # 如果打開文件失敗的話,就會顯示出錯誤的信息,之后再退出程序。


    指令:open

    語法1:open(filehandle,"$filename") 其中 $filename 是一個指定打開的文件名。

    說明:這是一個很常用的函數,可用于文件的打開(read only)。

    示例

    $filename="usr/abc.txt";

    open(FILE,"$filename")||die"不能打開文件$filename\n; #將<file>數據指定給純變量$line(一行一行地)

    while($line=)

    {

    print"$line";

    }

    close(file); 就會把abc.txt這個文件的內容顯示出來。

    語法2:open(filehandle,"<$filename")

    說明:這個語法也可以打開一個存在的文件(read only)。

    示例

    $filesname="usr/abc.txt";

    open(file,"<$filename")||die"不能打開文件$filename\n";

    @array=<file> # 將 全部的數據內容都指定給數組 @array

    close(file);

    print "@array"; # 也會把abc.TXT這個文件的內容顯示出來。

    語法3:open(filehandle,">$filename")

    說明:建立一個新的文件(write only);如果已經存在這個文件了,就會把舊文件名覆蓋掉。并可用print filehandle的方式將數據存入打開的文件中。

    示例

    $filename="/usr/abc.txt";

    open(file,">$filename")||die"不能打開文件$filename\n;

    print file "this is a new line1\n; # \n是換行字符

    print file "this is a new line2\n;

    close(file); # 會將數據存在一個新文件中。

    語法4:open(filehandle,">>$filename")

    說明:數據用附加的方式定入一文件(write only),如果指定的文件名不存在的話就會建立一個新的文件。

    示例

    $filename="/path/abc.txt";

    open(file,">>$filename")||die"不能打開文件$filename\n";

    print file "this is a new line1\n";

    print file "this is a new line2\n";

    close(file); # 會打數據附加(append)到一個文件(abc.txt)中。

    語法5:open(filehandle,"|unix command")

    說明:就會把在filehandle的數據輸入給unix的指令來作處理。

    示例

    $mailprog="/usr/ucb/mail"; # unix系統上的寄信程序(一定要加絕對路徑)

    $who="mqingyi@126.com";

    $open(file,"|$mailprog$who")||die"打開失敗\n";

    print file "I love you!\n";

    print file "I want to see you.\n";

    close(file);

    該段代碼通過 unix 系統的 mail 程序,將 FILE 這個 FILEHANDLE 的數據內容寄給 $who 這個變量所指定的收信人。


    指令:close

    用法:close(filehandle)

    說明:用 open 這個函數來打開一個 filehandle 之后,一定要用 close 批這個函數把所打開的 filehandle 關閉。

    示例

    open(filehandle,"$filename");

    close(filehandle);


    指令:pack

    語法:pack("指定的格式",list)

    說明:pack這個函數會將一個 list 變成所指定的二進制數據格式。在CGI程序分割解碼過程中,會用到 pack 這個函數。

    示例

    $string=pack("c",65); #這時 $string="a"; 將65這個ascii碼轉換成一個unsigned字符,其中c就是指定指轉換成 unsigned 字符的意思。


    指令:read

    語法:read(filehandle,$string,length) 其中 length 是代表讀入字符串的長度(bytes)。

    說明:用 read 這個函數把 filehandle 中的數據依指定的字符串長度讀入之后指派給 $string 這個變量。在cgi程序分割解碼過程中,如果 FORM 的傳送方式是設定為POST的話,就會將傳送的數據設定為標準輸入,所以會將數據內容指定給 STDIN 這個標準輸入的 filehandle ,而CGI環境變量 $env{'content_length'} 就是代表使用者送出數據內容的長度,因此我們要用 read 這個函數來取得使用者送出的數據內容。

    示例

    read(stdin,$buffer,$env{'content_length'}); # 就會將 stdin 這個標準輸入 filehandle 中的數據依指定的字符串長度讀入,再指派給 $buffer 這個變量。


    指令:exit

    語法:exit

    說明:退出執行的程序。

    示例

    print"i love cgi\n"; exit; # 表示顯示完 "i love cgi" 以后,將退出這個程序。


    5    文件操作

    大多數 Perl 程序都不是孤立的,它們與環境相互作用。很多的程序也需要通過文件操作實現數據的存貯和交換。文件句柄(file handle)是 Perl 程序中為程序和外部世界提供 I/O 連接的名稱。建議在 Perl 程序中文件句柄全部使用大寫字母,以示與變量等字符串的區別。特別地,可以將 STDIN/STDOUT/STDERR 也認為是 Perl 的文件句柄,分別代表 標準輸入/標準輸出/標準錯誤輸出。

    打開及關閉文件

    Perl的文件操作與C語言極為相似。如:

        open(FILENAME,"abc.txt");

    該調用為讀文件打開,若為寫文件而打開,需在文件名前加上大于號:

        open(FILENAME,">abc.txt");

    若要追加至文件尾,可在文件名前加上兩個大于號:

        open(FILENAME,">>abc.txt");

    以上三種open()格式在成功時返回真,失敗時返回假。但程序中通常沒有提示,出錯時往往會被人們忽略。 通常當需要給出出錯提示時,可加入die()函數。例如:

        open(OUTFILE,">/tmp/outfile")|| die "出錯,不能建立/tmp/outfile\n";

    當 open 操作失敗時,就會執行 die 給出出錯提示。

    對文件句柄的操作完成后,可以用 close 操作符關閉文件。如:

        close(OUTFILE);

    文件測試

    Perl的文件操作也可以先測試文件是否存在,是否可讀寫等,這樣操作起來會更安全。如:

        $x="abc.txt";

        if(-e $x) { #abc.txt是否存在?

           # 存在操作

        } else {

           printf "文件不存在。\n";

        }



    -e 操作符用于測試文件或目錄是否存在。

    以下為所有文件測試操作符的清單:

    文件測試 測試操作符提供的信息
    -r 文件或目錄可讀
    -w 文件或目錄可寫
    -x 文件或目錄執行
    -o 文件或目錄歸用戶所有
    -R 文件或目錄對真正用戶可讀
    -W 文件或目錄對真正用戶可寫
    -X 文件或目錄對真正用戶執行
    -O 文件或目錄歸真正用戶所有
    -e 文件或目錄存在
    -z 文件存在且大小為0
    -s 文件或目錄存在且不為0(返回字節數)
    -f 文件為普通文件
    -d 文件為目錄
    -l 文件為符號鏈接
    -p 文件為命名管道(FIFO)
    -S 文件為一個套口(socket)
    -b 文件為塊特殊文件
    -c 文件為字符特殊文件
    -t 打開tty控制臺的文件句柄
    -u 文件或目錄是設置用戶ID號
    -g 文件或目錄是設置用戶組ID號
    -k 文件或目錄的sticky位置位
    -T 文件是文本文件
    -B 文件是二進制文件
    -M 以天為單位的存在時間
    -A 以天為單位訪問時間
    -C 以天為單位同代碼更改時間
     

    刪除文件

    Perl的 unlink() 操作符可實現刪除文件。如:

        unlink("abc.txt"); # 刪除abc.txt

    文件重命名

    Perl的rename()操作符可實現文件重命名。如:

        rename("abc","aka") || die "出錯,不能更名";

    此時將文件 abc 更名為 aka,成功返回真,否則給出出錯提示。

    目錄操作

    Perl中處理目錄非常類似于對文件的處理。

    打開目錄句柄:

        opendir(ETC,"/etc")||die "出錯,不能打開目錄";

    關閉目錄句柄:

        closedir(ETC);

    創建目錄:

        mkdir("aka",0777)||die "不能創建 aka 目錄";

    0777 為文件權限描速數。

    刪除目錄:

        rmdir("aka") || die "不能刪除 aka 目錄"。

    7.6 進程管理

    當你向系統 Shell 發送一個命令行時,Shell 創建一個進程來執行這個命令。這個新進程成為 Shell 的子進程,它的執行不依賴于 Shell 但又與 Shell 相互協調。 同樣,Perl程序也能啟動新進程。

    使用system()和exec()

    生成新進程的最簡單的方法就是用 system 操作符。如:

        system("date");

    若要將輸出送至now_day文件,則可以:

        system("date>now_day") || die "不能建立now_day文件";

    使用單引號

    產生進程的另一方法是將 Shell 命令置于兩個單引號之間。如:

        $nowday="現在時間:".'date'

    $nowday 的值為“現在時間:”和date命令的結果的連接。即:"現在時間:Fri Feb 18 23:49:23 PDT 1998"

    綜合范例

    舉一個綜合例子,要求從date的輸入中分析,周未時打印"周未了,輕松一下",否則打印"努力工作"。簡潔的寫法為:

        if('date'=~/^S/){

        printf "周未了,輕松一下\n";

        } else {

        printf "努力工作\n"

        }


    date 的輸出格式第一個字節為星期,英語中恰好只有周未為 "S" 打頭,因此使用了常規表達式判斷第一個字符是否為S,即可達到要求。



    原文轉自:http://www.kjueaiud.com

    ...
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>