一:基礎vim
1:安裝perlcentos
print "Hello , world!\n";數組
#!/usr/bin/perlprint 1.2;print 2.000;print -3;print -1.2E22;print 12_321_435;#數字,方便查看print o 377; #八進制print ox ff; #十六進制print ob 11111111;#二進制print 2+2;print 2-1.2;print 1.2 - 3.3;print 1/3; #內部使用雙精度計算print 1.0/3;print 1/2.0;print 10%3;print 3**3;
2):字符串(使用utf8編碼,文件也需要保存爲utf8格式)函數
#!/usr/bin/perluse utf8; #使用utf8字符集binmode(STDIN, ':encoding(utf8)'); #使用utf8輸入binmode(STDOUT, ':encoding(utf8)'); #使用utf8輸出binmode(STDERR, ':encoding(utf8)'); #使用utf8輸出錯誤print 'gbz is good\n'; #使用單引號的字符常量print "gbz is good\n"; #使用雙引號的字符常量print "\x{2744}"; #雙引號的常量自動轉義#perl中的操做符跟據運算符號判斷需要的是什麼類型的值,並會自動轉換print "he" . " gg\n"; #.鏈接符print "he" * 5 ."\n"; #*算數運算,把he轉爲數字爲0print "33he" * 2 . "\n"; #33he轉爲數字爲33print "he" x 4.8; #x字符串複製倍數print "he" . 3 * 4 ; #先算數運算,在字符運算
3):打印錯誤信息ui
#!/usr/bin/perl -w 打印簡單錯誤信息use diagnostics; #打印詳細錯誤信息
#!/usr/bin/perluse utf8$age = undef;$age2 = undef;
print $age += 1; #與數字運算時,表示0
print "gbz" . $age2 . "gbz"; #與字符運算時,表示空串print defined(undef); #判斷是否爲undef,是:空,否:1$name = "gbz"; #變量名要有意義$name_length = length($name); #包括字母下劃線等print $name;print " ${name} is size : $name_length\n"; #字符串中引用盡可能使用${}$ord_name = ord($name); #一個字符轉換爲碼值print $ord_name . "is " . chr($ord_name); #碼值轉字符
use utf8;
#字符比較符:eq,ne,lt,gt,le,ge
#數字比較符:==,!=,< ,> ,<=,>=
print '1' eq '1'; #字符串比較,true 返回1
print '2' eq '1'; #字符串比較,false 不返回
print 1 == 1; #數字比較
print 2 == 1;
$name = '\n';
if(''|0|'0'|$name){ #假:空,數字0,字符0
print 'true';
}else{
print 'flase';
}
$line = <STDIN>; #用戶輸入流,以回車結束
if($line eq "\n"){
print "this is blank!\n";
}else{
print "not blank: $line";
}
chomp($line); #去掉末尾回車符,返回1,不然返回0
chomp($line2 = <STDIN>); #先去掉回車,再賦值給變量
print $line2;
$line3 = <STDIN>;
print chomp $line3; # perl方法能夠不用括號
$count = 0;
while($count < 10){
$count += 2;
print "${count}\n";
}
6):列表和數組this
use utf8;$list[0] = 1; #數組從0開始
$list[1] = '2'; #能夠存放不一樣類型的值
$list[100] = 100; #建立了101個元素,中間的值爲undef
print $list[0] . '--' . $list[100] . '--' . $list[50] . '--';
print $list[1.22]; #下標去掉小數
print $list[-1]; #最後一個
print "\n";
$list = 111;
print $list; #與數組同名的變量,與數組是不相關的兩個變量
print $list[-22];
($array11,$array12,$array13) = (1,2,3); #列表建立及賦值
($array21,$array22) = (1..6); #..範圍操做符,把前兩個元素賦值
$array3 = qw ( 1 2 3 ); #使用qw 建立數組
$array4 = qw / 1 2 3 4 '1'/;
print $array11;
print $array22;
print $array4; #返回最後一個元素
@array = (1.2..5.6); #小數會轉換成整數
print @array; #@表示整個數組
print pop @array; #取出末尾一個元素
push @array,1..3; #把1,2,3放到@array末尾
print @array;
print shift @array; #取出第一個元素
unshift @array,1; #把1放到開頭
splice @array,1,2,qw(22); #從索引1開始,取出兩個元素,用22替換
$_ = '44'; #$_是perl的默認變量,是全局變量
foreach $_ (@array){ #在循環中$_是局部變量,與全局變量佔用不一樣的存儲空間
print $_ . "\n";
}
print $_;#循環外打印的是全局變量的值
print reverse 1..6; #倒序
print sort 5..10,'ss',' ',"\n"; #unicode碼值順序
7):map(哈希)編碼
@k = keys %map; #獲得全部key
#!/usr/bin/perluse utf8;#use strict; #use 5.012 嚴格編譯檢查,建意開啓sub max {$n += 1; #perl默認變量都是全局變量print "number is $n\n";}&max; #調用自定義方法&max;sub max { #會覆蓋同名方法,此時上面的兩個調用的也是被覆蓋的方法print "~~~~";}max; #如可沒有和perl內置方法重名能夠省略&號調用方法sub number {$n = 0;$n + 3; #默認子程序返回值爲最後一句代碼的值}print &number;sub return_sub {1 + 1;return 22; #能夠返回列表,標量,undef; return ; 通常表示程序執行有誤1 + 2;}print return_sub;sub unmber_max {my($m,$n) = @_; #my()用來定義私有變量,與方法外同名變量互不影響if ($_[0] > $_[1]){ #perl使用@_來接收參數,是私有變量$m; #也會使用$_[index]數組來接收參數}else{$n;}}print &unmber_max(19,30);use 5.010; #foreach需要設定版本纔可以使用sub addlist {state @lists; #私有變量,其值會被保存下來,留給下一次子程序執行時繼續使用foreach my $l (@_){push @lists,$l;}say "this list @lists";}addlist(1..4);addlist(2,7);say @lists; #方法外不能訪問state 定義的變量
print "I saw ${line}\n";
}
//簡寫
while (<STDIN>){
print "I saw $_\n";
}
3)標準參數(@ARGV,咱們能夠修改它)while (<>){chomp; #默認去掉$_後的換行符print "I saw $_\n";}調用:./io io #讀取「文件io」到標準輸入流
4)標準輸出(<STDON>)調用: ./io sub默認參數存放到 @ARGV 中, <STDIN>依次讀取@ARGV中的數據
5)文件句柄print("out print str"); #輸出到標準輸出流print "out print str"; #簡寫,去掉括號print (2+4)*4; #print (2+4)輸出成功返回1,再乘4printf "hello , %s; in %d days!\n" ,"gbz" , 3;
printf "%g %g %g \n" , 5/2 , 31/17 , 22**33; #數字原樣輸出
printf "截斷,只保留整數部分 %d \n" , 22.334;
printf "||% 6d||% -6d||\n" , 33 , 55; #正6左補空格,負6右補空格
printf "||%12 .3f||\n" , 43.23525; #保留3位小數
printf "%.2f%%\n" , 22.45; #百分號use 5.010;say "gbz" ; #自動換行功能my @list = qw (22.34 11.542 11.667);
printf "the items are:\n" . ("%10.1f\n" x @list), @list; #至關於%10.1f\n %10.1f\n%10.1f\n# ("%10.1f\n" x @list) 標量上下文,@list爲元素個數
open CONFIG, '<io'; while (<CONFIG>){ chomp; print $_; }
改變輸出句柄:spa
open my $log_fh, '>','io.txt' or die "error : $! \n"; #打開文件,有錯誤會報錯 print {$log_fh} "gbz"; #輸入到文件中 while (<$log_fh>){ #讀取,'>' 換成 ‘<’ chomp; print $_; }