1. 第一個程序:正則表達式
#!/usr/bin/perl數組
print "hello world.\n";函數
2. 第二個程序scala
#!/usr/bin/perl對象
use 5.010; #告訴perl要使用5.010版本的新特性排序
say "hello world."; #與print效果同樣,只是不須要「\n」便可換行索引
3. 使用變量前不須要定義rem
4. 第三個程序字符串
#!/usr/bin/perl
#
@lines = `perldoc -u -f atan2`; #用倒引號調用外部程序,輸出的結果會一行行地存儲在@lines這個數組變量中。
foreach (@lines) {
s/\w<([^>]+)>/\U$1/g;
print;
}string
5. 在 Perl 中,無論是數字仍是字符串都用標量(scalar)來存儲,一個標量變量以 $ 開頭。Perl是經過操做符來識別變量是數字仍是字符串。
6. 字符串操做
6.1 "aaa"."bbb"
6.2 "aaa" x 4 #aaa重複4次
7. 標量變量
以$開頭
8. 比較操做符
比較 數字 字符串
相等 == eq
不等 != ne
小於 < lt
大於 > gt
小於或等於 <= le
大於或等於 >= ge
9. if語句
if () {
} else {
} #必定要有{},哪怕只有一個語句
10. 獲取用戶輸入
$text = <STDIN> #獲取用戶輸入
chomp($text) 或 chomp $text #去掉"\n"
11. while 語句
$count = 0;
while ($count < 10) {
$count += 2;
print "$count\n";
}
12. undef值
如查一個變量沒有被賦值,那麼它的值是undef,表示什麼也沒有。
$line = <STDIN>;
if (defined($line) ) #若是$line是undef,返回假 {
print "$line\n"
}
13. 列表與數組
列表是指標量的有序集合,數組是存儲列表的變量。
13.1 訪問數組
$array[0] = 0;
$#array 比數組大小小1,由於數組下標是從0開始。
$array[-1] 表示最後一個元素
13.2 列表直接量
(1,2,3)
(1..5)與 (1,2,3,4,5)等價
(1, 「abc」)列表中能夠有任何標量值
13.3 qw簡寫
qouted word 這種寫法能夠減小引號與逗號輸入次數。
qw( abc def ghi)
13.4 pop 和 push 操做
@array = 5..9; #定義數組(5,6,7,8,9)
$fred = pop(@array); #fred等於9 array變成(5,6,7,8)
push(@array, 0);==》push @array, 0; #向數組添加一個數
push @array, 1..10; #向數組添加一個數組
@others = qw(1 2 3);
push @array, @others;
13.5 shift 和 unshift
pop與push處理的數組尾部,而shift與unshift處理的數組開頭。
13.6 splice 操做符
其最多能夠有4個參數,其使用方法以下:
示例1 :
@array = qw (1 2 3 4);
@removed = splice @array, 2;#array 等於(1,2),removed等於(3,4)。
示例2 :
@array = qw (1 2 3 4);
@removed = splice @array, 2, 1; #array equals (1 2 4), remove equals (3).
示例3 :不僅刪除,還能夠添加,若是第三個參數爲0,則只添加不刪除。
@array = qw (1 2 3 4);
@removed = splice @array,2,1,@array1;
13.7 foreach控制結構
$_變量
foreach (1..10) {
say $_;
}
13.8 reverse操做符
reverse @array; #反轉array數組。
13.9 chomp
13.10 sort操做符能夠對數組進行排序
13.11 each 操做符
返回數組的值與索引。
while ( my($index, $value) = each @array ) {
say "$index: $value";
}
13.12 $#array,表示數組的大小。
13.13 去掉一行行首與行尾的空格 :
my $str = " xyj";
$str =~ s/^\s+|\s+$//g;
print $str;
print "\n" ;
或
先去掉前面的: $a=~s/^ +//;
在去掉後面的: $a=~s/ +$//;
14 子程序
14.1 定義子程序
sub marine {
}
14.2 調用子程序
&marine;
14.3 返回值
最後一次的運算結果會被看成子程序的返回值。
14.4 子程序的參數
@_ 是一個數組,@_[0]表示第一個參數。
14.5 子程序的私有變量
perl腳本里,全部的變量都是全局的,但能夠my($m, $n)定義私有變量。
一般會這樣用:my($m,$n) = @_
14.6 變長參數列表
if (@_ != 2) 能夠判斷參數的長度。
14.7 return操做符
若是子程序執行到一半想退出,那麼就能夠用return,return後面能夠有返回值。
14.8 子程序的調用方式
&chomp; 或 chomp(1,2);
15 輸入輸出
15.1 <STDIN>
15.2 鑽石操做符
while (<>) {
chomp;
print "$_\n";
} 這段代碼能夠打開以文件名做爲腳本參數的文件,並打印每一行。
15.3 腳本是如何獲取參數的
@ARGV
foreach (@ARGV) {
print "$_\n"
}
15.4 輸出到標準輸出
print <> 至關於cat命令
print sort <> 至關於sort命令
15.5 格式化輸出
printf
15.6 文件句柄
open CONFIG, 'dino';
open CONFIG, '<dino';
open CONFIG, '>dino';
open CONFIG, '>>dino';
打開文件句柄後,就能夠像STDIN同樣使用了。
print CONFIG "out put.\n";
關閉文件句柄 close CONFIG
15.7 die操做符
if ( ! open LOG, '>>', 'logfile' ) {
die "cannot create logfile: $!"
$!表示錯誤碼。
die 會終止程序的運行,而且會把程序名和行號附加在錯誤信息的後面。
15.8 autodie
use autodie;
本身沒必要寫die語句,若是有致命錯誤發生,腳本會自動調用die。
15.9 改變默認的文件輸出句柄
select 句柄 #但記得以後恢復默認句柄
if ( ! open LOG, '>>', 'logfile' ) {
die "cannot create logfile: $!";
}
while ( <LOG> ) {
}
或
select LOG;#會改變默認句柄。
$| = 1 #至關於作了sync操做。
或 print 句柄 「abc」
15.10 句柄能夠存在標量中
open $jubing , 文件
16. 哈希
16.1 訪問哈希元素
$hash{$key}
16.2 賦值
my %hash = {
abc => "123",
def => "456",
};
16.3 哈希函數
16.3.1 kes 和 values
my %hash = ('a' => 1, 'b'=>2, 'c'=>3);
my @k = keys %hash;
my @v = values %hash;
注:在標量上下文中,這兩個函數返回鍵值對的個數,$k = keys %hash
16.3.1 each函數
while ( ($key, $value) = each %hash ) {
say "$key => $value";
}
16.3.2 exists函數
查看某個鍵對應的值是否存在。
if (exists $books{"key"}) {
}
16.3.4 delete函數
刪除hash中key對應的值。
17 正則表達式
17.1 在perl語言中使用正則表達式
m 定界符 正是表達式 定界符 如: m(a*b)<=> /a*b/
注:定界符不惟一。
17.2 大小寫無關匹配
chomp($_ = <STDIN>);
if (/yes/i) {
}
17.3 匹配任意字符
默認狀況下點號沒法匹配換行符,/patten/s,便可匹配任意字符。
17.4 用/x加入空白符
/patten/x #其中patten能夠有空格
這樣就能夠寫出如上面的匹配形式,若是真的想要匹配空符的時候,能夠用轉意(\t或\s)。
17.5 錨位
絕對開頭 /Ahttp:*/
絕對結尾/.png/z
17.6 整詞匹配
/\babcdefg\b/
17.7 綁定操做符 =~
默認狀況下模式匹配的操做對象是$_
$some_other =~ /patten/s;
17.8 模式中的內插
也就是patten能夠爲一個變量。
my $what = "pattern";
if (/\A($what)/) { # 模式的錨位被定在字符串的開頭。
}
17.9 示例
$_ = "Hello there, neighbor";
if (/\s(\[a-zA-Z],/) {
print "the word was $1\n";
}
$1表示匹配到的結果。這裏$1等於「hello,」,不包括空格,也不包括逗號,且只匹配一個,即便後面還有能夠匹配的單詞也不會再匹配。
$_ = "Hello there, neighbor";
if (/(\S+) (\S+), (\S+)/) {
print "$1 $2 $3\n";
}
這個例子能夠匹配三個單詞。
其實$1 $2 $3變量對應的是圓括號內的匹配模式。默認狀況下圓括號內的匹配結果都是要存在$1這樣的變量中的,但能夠禁止:(?:pattern)
但$1這種形式很差記,還能夠將匹配結果放進哈希表內。
my $names = 'Fred or Barney';
if ( $names =~ m/(?<name1>\w+) (?:and|or) (?<name2>\w+ ) {
say "I saw $+{name1} and $+{name2}";
}
17.10 split操做符
my @fields = split /separator/, $string;
my @fields = split; #它會省略開頭的空字段,並以空字段分隔字符串。
17.11 join函數
my $x = join ":", 4, 6, 8, 10;
18 last操做符 與c語言中的 break等價
19 next操做符與c語言中的continue等價
20 redo操做符,回到循環的頂端
21 條件操做符
expresion ? == : ==;
22 邏輯操做符
與&& 或|| 非