常量
在程序運行中,其值不能改變且爲一定值的量稱爲常量。PERL的常量有兩種:數字常量和字符串常量。、
標量:單件事物。數字,字符串
可以用操作符對標量進行操作,結果通常也是一個標量。
常量用途:
1. 給變量賦值。
2. 作參數傳遞給函數。
數字常量
數據標量:
PERL裏,總是按“雙精度浮點數”來保存和運算。不存在整數。所謂整數,其實也是雙精度浮點數。
Perl允許在整數直接量裏插入下劃線,將若干位分開:
21_321_567_654
非十進制的整數直接量:
0:八進制 0123 # 83
0x:十六進制 0xff
0b:二進制 0b101110
數字操作符:+ - * / %
%:取模操作符,先取整後再求餘。
**:乘冪,2**3,表2的3次方。
字符串常量
在PERL中,字符串一般用雙引號或單引號括起來,包含任何字符。
單引號與雙引號的區別:
1. 單引號內的字符串直接量:不轉換
#!/usr/bin/perl
$object = "apple";
$string = 'this is an $object';#單引號
print $string;
輸出:this is an $object
2. 雙引號內的字符串直接量:轉換(變量插入)。
#!/usr/bin/perl
$object = "apple";
$string = "this is an $object";#雙引號
print $string;
輸出:this is an apple
3.雙引號識別轉義字符而單引號只識別兩個特殊轉義字符(/’,//)
$string = 'he//she is a student';
$string1 = '/'nothing here/'';
$string2 = 'no/nyes';
print "識別//:",$string,"/n";
print "識別/':",$string1,"/n";
print "不能識別:",$string2,"/n";
輸出:
識別/:he/she is a student
識別':'nothing here'
不能識別:no/nyes
字符串操作:
.:拼接
"hello"." world" #等同於"hello world"
x:重複操作符
"fred"x2 # "fredfred"
5x4 # 5555
數字和字符串的自動轉換:
對數字進行運算的操作符(如乘法)如果遇到數字字符串的操作數,perl會自動將數字字符串轉換成等效的十進制浮點數進行運算。
數字字符串:”12345”
例:
$num1 = "12345";
$num2 = "1";
print $num1 + $num2;
非數字符串的轉換:
$num1 = "123.5abc";
$num2 = 1;
$num3 = "abc123";
$sum1 = $num1 + $num2;
$sum2 = $num2 + $num3;
print "123abc + 1 = ",$sum1,"/n";
print "abc123 + 1 = ",$sum2,"/n";結果爲:
123.5abc + 1 = 124.5
abc123 + 1 = 1
字符串中非數字部分會被略過。
"12fred34"*"3" # 36
完全不含數字的字符串會被轉換成零。
“a123”*”2” # 0
非數字符串的轉換規則:
混合字符串運算中,把混合字符串從左到右取出字符,直到取到第一個非數字字符爲止,那麼此之前所取的浮點數用來參與運算。
變量
PERL變量基本類型:
1.標量:可以存放數字和字符;
2.數組:多個標量的集合;
3.散列:一程特殊的數組,關聯數組。
兩種衍生變量:
1.引用:特殊的標量,類似於C的指針;
2.句柄:一串標識輸入輸出的字符串,用來控制輸入輸出。
Perl中的數據類型少,卻可以用簡單的數據類型,生成相當複雜的數據結構,並且具有很快的數據操作能力。
變量命名:
一般變量名以小字字母,大寫字母或下劃線開頭,後面可以有數字,字母,特殊字符,而且長度沒有限制。如:$haha,$string等等。
當變量以數字開頭時,它是一種特殊變量,叫反引用變量,變量名必須全爲數字。如:$123;變量名也可以爲單個字符,此字符非字母、非數字和非下劃線,它也是特殊變量,叫內置變量。
在變量命名時,前面必須加指示符,指示變量類型:
1.$爲標量; $haha
2.@爲數組; @array
3.%爲散列; %hash
4.句柄比較特別,沒有指示符。
PERL區分大小寫。
$haha = 111;
$HaHa = 222;
print "小寫:",$haha,"/n";
print "大寫:",$HaHa,"/n";
結果:
小寫:111
大寫:222
變量賦值:
標量:
$num = 123;
$char = “abcd”;
數組:
@array = (“123”,”234”,”345”);
$array[1] = 23;
散列:
%hash = {“age” => 18,”you” => 34};
$hash{“age”} = 28;
變量作用域:
1.全局作用域:PERL默認作用域。
2.局部作用域:只有在函數內才能使用。local(), my()操作符.
$char1 = "all";
my $char2;
$char2 = "out";
{
my $char3;
$char3 = "in" ;
print "$char1,$char2,$char3/n";
}
print "#####################/n";
print "$char1,$char2,$char3/n";
結果:
all,out,in
#####################
all,out,
$char1 = "all";
my $char2 = "out";
{
my $char2;
$char2 = "in";
print "$char1,$char2/n";
}
print "$char1,$char2/n";
結量:
all,in
all,out
local與my的區別:
local:定義的變量除了在塊內有效外,在塊內調用的子程序也可以訪問它,即使此子程序在塊外定義。
My:定義的變量對塊內的子程序也不可見。比local更安全。
內置變量:
爲了編程方便和補充語法不足。
內置變量表
變量 |
長名格式 |
含義 |
$_ |
$ARG |
默認輸入變量或模式搜索空格 |
$& |
$MATCH |
最近成功匹配模式所對應的字符 |
$’ |
$PREMATCH |
最近成功匹配模式之後的字符 |
$+ |
$LAST_PAREN_MATCH |
最近搜索模式匹配的最後一個括號 |
$* |
$MULTILINE_MATCHING |
控制字符串多行匹配的開關 |
$. |
$INPUT_LINE_NUMBER |
最近文件句柄讀取的當前輸入行號 |
$/ |
$INPUT_RECORD_SEPARTOR |
輸入記錄分隔符 |
$| |
$OUTPUT_AUTOFLUSH |
控制是否進輸出緩衝的開關 |
$, |
$OUTPUT_FIELD_SEPARATOR |
Print函數輸出字段分隔符 |
$/ |
$OUTPUT_RECORD_SEPARATOR |
Print函數輸出記錄分隔符 |
$” |
$LIST_SEPARATOR |
Print函數輸出清單分隔符 |
$# |
$OFMT |
打印數字的輸出格式 |
$% |
$FORMAT_PAGE_NUMBER |
當前所選輸出文字句柄的當前頁號 |
$= |
$FORMAT_LINES_PER_PAGE |
當前所選輸出文件句柄的當前頁長號 |
$- |
$FORMAT_LINES_LEFT |
當前所選輸出文件句柄的頁面中餘下行數 |
$~ |
$FORMAT_NAME |
當前所選輸出文件句柄的當前格式名 |
$^ |
$FORMAT_TOP_NAME |
當前所選輸出文件句柄的當前頁頭格式名 |
$: |
$FORMAT_LINE_BREAK_CHARACTERS |
格式中要分隔字符串以填滿連續字段之前的字符設置 |
$! |
$ERRNO |
錯誤號的當前數字或字符串 |
$0 |
$PROGRAM_NAME |
所運行的PERL腳本的文件名 |
$$ |
$PROCESS_ID |
運行該程序的PERL進程號 |
$< |
$REAL_USER_ID |
進程的實際用戶ID名 |
$> |
$EFFECTIVE_USER_ID |
進程的生效用戶ID名 |
$( |
$REAL_GROUP_ID |
進程的實際組ID名 |
$) |
$EFFECTIVE_GROUP_ID |
進程的生效組ID名 |
$[ |
$ |
數組的起始索引號 |
$] |
$PERL_VERSION |
PERL解釋器版本號 |