Perl語法簡介html
1.PERL變量git
1.2.Perl變量工具
1.2.2 數組變量scala
2.PERL運算符code
1.PERL變量
Perl變量分爲標量變量,數組變量,關聯數組變量3類.PERL的變量對大小寫敏感,好比:An,
AN,an是3個不一樣的變量,可是不一樣類型的變量可使用同一個名字,好比:VAR能夠是一個標量
變量,同時也能夠有一個數組變量也是VAR.這是由於PERL對每種類型的變量採用獨立的名字空
間,另外PERL的變量,能夠存儲任何類型的數據,無須像C那樣聲明變量,數據類型之間會自動轉
換,同時PERL變量也有全局與過程變量之分,默認是全局變量.
1.2.Perl變量
標量變量只能存放一個值.PERL中的標量變量名總以字符$開頭.下面的PERL語句把9這個
值賦給標量變量$nine.把"BATI"賦給標量變量$name.而後用PRINT語句打印出來.
$nine=9;
$name='BATI';
print($name,'is',$nine);
把上述語句存爲TEST01.PL文件,而後再在DOS環境下(WIN9X的MS-DOS方式也能夠)運行:
C:\PERL5>PERL TEST01.PL(回車)
BATI is 9
(什麼?很眼熟??是阿,PERL和咱們經常使用C就是這麼類似)
數組是一次可以存儲多個變量的表.它的賦值方法以下:
@weekdays=('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
print (@weekdays); #輸出爲: SunMonTueWedThrFriSat
print ($weekdays[1]); #輸出爲: Sun
@work=@weekdays[1..5]; #此時,數組work的值爲('Mon','Tue",...,'Fri');
@none=(); #表示空數組
數組變量名以@開頭,[]內是數組的下標值,下標值從0開始.這與C依然很類似.
一樣的在PERL中,若是隻有數組名,而忽略下標的話,也會像C那樣輸出整個輸出,好比:
第一個輸出語句.
但請注意在輸出Sun那一句時,當咱們引用數組中某一個值的時候,咱們再也不使用@,而是
使用$做爲變量的開頭,由於就單個值而言,它是一個標量變量,因此如此(這和C可不同哦)
固然你還得給出下標值.
在給數組work賦值的語句中,咱們用到了SLICE初始化數組,你沒必要關心什麼是SLICE,你
只要記住這種形式就能夠了,其實SLICE是表格的一部分,是官方的表示.
對數組的賦值是多種多樣的.前面咱們看到的都是用值對數組賦值,一樣你也能夠用變量
或者另外一個數組的值給數組賦值,好比:
@name=($firstname,@lastname);
@say=('He said',@saysomething);
如下是SLICE的例子:
@weekend=@weekdays[0,6]; #數組weekend的值爲('Sun','Sat')
print(@weekdays[1..5,0,6]); #輸出結果爲'MonTueWedThuFriSunSat'
PERL還支持一種特殊構造符$#var,它是用來返回數組最後一個索引值.好比下面的語句利
用$[構造符肯定數組的第一個索引值,用$#var肯定數組最後的索引值,而後顯示整個數組:
for ($i=$[;$i<=$#buffer;$i++) { print $buffer[$i]; }
上面語句與print @buffer;的輸出結果是同樣的.
表構造符(,)與順序計值運算符(,)很是類似.所以,PERL調用哪個運算符取決於命令文件
運行時的具體狀況,即文件正在使用數組仍是標量值.PERL在數組表達式中調用表結構符, 在順
序計值中調用計值運算符.請考慮如下兩個表達式:
@an_array=(1,2,3,4,5);
$a_scalar=(1,2,3,4,5);
第一個語句初始化一個數組,第二句把$a_scalar變量的值設爲5,並且取消了前4個元素的賦
值做用.
再來看一個例子:
print $assoc{1,2};
@print $assoc{1,2};
第一句打印二維關聯數組的一個元素值,而第二句打印一維數組的兩個元素值.
關聯數組變量與數組變量很類似,均可以存儲標量變量的表.它們的區別在於數組變量必須通
過整數下標來引用數組元素, 而關聯數組變量能夠經過任何值做爲下標而達到訪問數組元素的目
的.關聯數組的下標咱們稱之爲鍵值(Key),是一種索引值.下面咱們經過一個例子來理解:
$ages{'Bob'}=35;
$ages{'Mary'}=25;
$,='';
print @ages{'Bob','Mary'};
print keys(%ages );
for $name(keys(%ages))
{
print "$name is $ages{$keys}\n";
}
程序把一個值賦給'$,'變量,這樣之後的print語句的輸出會受到影響,關於特殊變量'$,'咱們
將在之後介紹.PERL調用關聯數組變量時,使用花括號{}括起鍵值.
@ages{'Bob','Mary'}在花括號內給出了鍵值,表示引用一個元素,此語句中有兩個鍵值,表示引
用數組的一部分,其結果應爲(35,25)與($ages{'Bob'},$ages{'Mary'})語句的結果相同.
print keys(%ages)使用了keys運算符.其結果將返回關聯數組的全部鍵值,組成一個表.%ages
表示引用整個關聯數組.
請注意循環語句中的print語句,在這裏咱們看到了在""(雙引號)中插入變量的用法,這是很是有
用的.在輸出結果的時候,變量將被替換成變量的值做爲輸出的最終結果,這就是所謂的內插法.可是PERL
不容許在''(單引號)中插入變量!!!!
2.PERL運算符
PERL雖然在變量與數據類型都和C大不相同,然而它的運算符和C幾乎相同,除了C的類型
轉換運算符type,指針引用運算符*ptr和結構成員選擇符,其餘C的運算符幾乎徹底出如今
Perl裏,Perl新增了幾個新運算符,好比在字符處理方面.
Perl到目前支持的算數運算符有一些幾種:
+ 加法運算符
- 減法運算符
* 乘運算符
/ 除運算符(只對浮點數運算)
% 取模運算符(只對整數運算)
下面給出Perl算數運算的一些實例:
$x=2.5;
$y=3;
print ($x+2*$y);
print (7/$y);
print int(7/$y);
print (7%$y);
print (7.5%$y);
Perl還支持遞增和遞減運算符:
++ 遞加
-- 遞減
Perl新增了乘方運算符:**,請看下面的例子:
$x=2**3; #2的3次方
$y=2**0.5; #2的平方根
$z=-2**-3; #結果是:-0.125
2.2 位運算符
位運算符對二進制表達式的整數形式進行處理,運算結果爲整數.若是位運算符的操做數是
字符串或分數,Perl首先把它們轉換成整數,並用32位長整數形式表示它們.Perl支
持全部的C語言運算符:
| 位或運算符
& 位與運算符
. 位非運算符
<< 位左移運算符>> 位右移運算符
有關位運算符的詳細內容,請參看C語言有關的內容,這裏咱們就很少講了,只舉幾個例子:
$x=5;
$y=3;
print $x | $y; #結果是7(二進制表示:111)
print $x & $y; #結果是1(二進制表示:001)
print $x << 2; #結果是20(二進制表示:10100) print $x>> 1; #結果是2(二進制表示:10)
2.3 比較運算符
比較運算符的功能是比較兩個操做數的值.Perl在進行比較運算前,會先將字符操做數轉換 爲數字.Perl用專門的字符串比較運算符對純字符進行表運算.
運算符 | 等價字符串 | 含義 | |||||||||||||||||||||
|
|
|
2.4 邏輯運算符 邏輯運算符測試布爾表達式的值,其結果爲真或假.Perl認爲邏輯運算符的每一個操做數都
爲布爾值(即真或假).Perl的邏輯運算符包括:
|| 邏輯或運算符;
&& 邏輯與運算符.
Perl按從左到右的順序計算邏輯表達式.當邏輯或運算符的一個操做數爲真,或者當邏輯
與運算符的一個操做數爲假時,Perl將終止邏輯表達式的計算.Perl利用這種短迴路計值
快速計算表達式的值.所以,這兩個運算符也叫短迴路AND和短迴路OR.
除了以上兩個運算符,還有如下三種邏輯運算符:
! 負運算符
?: 條件運算符
, 順序計值符
運算符!否認操做數的布爾值,至關於邏輯非.?:條件運算符,有3個操做數,表達形式爲:
condition?true-result:false-result
下面的語句經過?:運算符,實現訪問權限的區分:
$access=($user eq '流雲'?'root':'guest');
順序運算符(,)從嚴格意義上講並非邏輯運算符,由於它並不檢查操做數的真假.Perl
從左到右的計算逗號運算符,並返回最右邊的操做數,都好運算符是從C延續出來的,具體使用能夠
參考C裏的用法,這裏我就不累述了.
因爲Perl自己是爲文本處理開發的.所以,它增長許多新的字符串運算符.Perl的字符
串運算符包括:
. 字符鏈接運算符
x 字符串複製運算符
=~ 將一個變量綁定到模式匹配
!~ 將一個變量綁定到模式匹配,取非
前兩個運算符比較簡單.如今看看例子:
print 'C'.'a'.'l'x2; #輸出結果將是: Call;
後兩個運算符主要用於模式匹配,之後將會有關於模式匹配的具體講解,這裏就很少說了,咱們
來看看它們的例子,以瞭解它們的做用:
$text='今天下雨了';
print ($text=~/下雨/)?'今天下雨了':'今天沒下雨';
咱們看到的例子能夠發現是否變量中是否包含咱們所須要的字符串.
賦值運算符和C語言的賦值運算符差很少,如下是各類賦值運算符:
= += -= *= /= %= |= &=
^= ~= <<=>>= **== .= x=
在Perl和C語言中,lvalue表示賦值運算符左邊的實體.也就是說,lvalue與變
量同樣,能夠給它分配值.例如在Perl命令文件中不能向字符串賦值,如"Bob"=32這個語
句就是錯誤的!由於"Bob"不是一個lvalue,可是若是對$Bob賦值,如$Bob=32,
這個語句就是正確的!由於變量$Bob是一個lvalue.
在Perl中,任何有意義的lvalue只能表示一個實體.例以下面的第一個語句列出了表的
值(就是數組的值,只不過說法不同罷了),@color就是一個lvalue,第二個語句中,
將表的值賦值給3個標量變量,3個變量就是lvalue:
@color=($r,$g,$b);
($r,$g,$b)=@color;
Perl的賦值運算符對錶進行處理時,能夠不對整個表進行處理,而只針對表的某一個或者幾個
元素進行賦值:
@times[2,5,9]=(20,40,10);
下面的語句把表的前2個值賦給兩個標量,其他部分賦給另外一個表:
($arg1,$arg2,@reset)=@ARGV;
2.8 表運算符
Perl包括如下一些表運算符,而C沒有:
, 表構造符
.. 範圍運算符
x 表複製運算符
前面咱們在介紹"標量與數組變量"時,已經設計到了構造符(我認爲叫分隔符,
更容易理解些)範圍運算符咱們在用來建立數組下標範圍時,也用到過!不過,請注意它的功能還遠不止這個,
它還能夠用來做爲返回從左邊操做數到右邊操做數之間順序整數的範圍(包括左右兩邊的操做數).命令文件通
常同時利用範圍運算符創造一個連續整數表:
@digits=0..9;
這樣咱們就創造了一個表,其值爲(0,1,2,3,4,5,6,7,8,9)
表複製運算符是一個很是有趣的東東,咱們來看一個例子:
@copy_3=(1,2,3)x3;
這個表有9元素,其值爲(1,2,3,1,2,3,1,2,3)怎麼樣?很方便吧!!:)
Perl大大擴展了文件處理運算符.Perl至少有27個運算符在不打開文件的狀況下,可以測試文件
的信息,可是很不幸,因爲Perl在最初是UNIX下的工具,因此絕大多數的運算符在咱們流行的平臺上:
WIN9X/NT系統沒法使用.但萬幸的是否是所有還有4個運算符絕對可用,並且功能不錯哦!一下就是那
4個運算符:
-d 測試文件是否是一個目錄;
-e 測試文件是否存在;
-s 測試文件的大小;
-w 測試文件是不是可寫的;
前兩個運算符返回的是布爾值(即真或假),第3個運算符返回文件的大小(以字節做爲返回方式).下面是
使用方法: if(-e 'perl.exe') { print 'File size is:'-s'perl.exe'; } else { print 'Can\'t find perl.exe\n'; } (-w 'SomeFile')||die "Cannot write to SomeFile\n";