Perl 入門:
1)純量變數 (scalar variable):符號 $,內容可以是整數、小數、字串單引號或雙引號括住,雙引號括住裏面可帶變數或脫逸字元。
$n1 = 25; # 25 $n2 = 2.5; # 2.5 $s1 = "There are $n1 dollars.\n" # 雙引號字串 $s2 = 'There is no spoon.'; # 單引號字串
2)陣列變數 (array variable):符號 @,其字面常數為用小括弧圍起來的資料,可使用 .. 運算子表示某一定範圍的值
@array = (1, 2.0, 'spoon'); # 三個元素的陣列 @10 = (1 .. 10); # 從 1 到 10 的陣列 @alph = ("a" .. "z"); # 小寫英文字母表陣列 @days = qw/Monday Tuesday Wednesday Thursday Firday Saturday Sunday/; # 星期一到星期天的英文單字陣列 ### 上面@days 用了另一種運算子 qw/值/,這會將//範圍內的文字以官白字元拆開成字串放置到陣列內,等同於: @days2 = ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Firday', 'Saturday', 'Sunday'); ### 字串的取值可以用中括弧加索引值,索引值由0遞增,如: @array = (1, 2.0, 'spoon'); print $array[0]; # 印出 1 print $array[1]; # 印出 2 print $array[2]; # 印出 spoon
3)雜湊變數 (hash variable):符號 %,雜湊變數則是一種 key-value 配對的資料型態,例如
%ages = ('Tony' => 28, 'John' => 35, 'Mary' => 29); ### 其中Tony' 、 'John' 、 'Mary' 為 key , 28 、 35 、 29 各是所屬的 value ,存取元素則利用中括弧加 key 值 print $ages{'Tony'}; # 印出 28 print $ages{'John'}; # 印出 35 print $ages{'Mary'}; # 印出 29
#!/usr/bin/env perl # # 基本語法 # ;用於語句結束符 # #用於註釋 # ""用於表示字符串,變數可以在""中被替換,如: $var = "world."; print "Hello $var\n"; #輸出為:Hello world. # ''用於表示字符串,''內的所有內容都被當作純文本,如: print 'Hello $var\n'; #輸出為:Hello $var\n # 關於style print("Hello, world\n"); #OK print "Hello, world\n"; #OK # 變數類型 # Perl主要有三種變數類型: 純量變數、純量陣列、hash陣列、指標 # Perl不需要預先聲明變數,直接將變數值附給變數即可 # 標量表示單一值,以$後接變數名來表示一個標量 # 標量可以存儲字符串、整數、浮點數 $var_scalar = 1; print $var_scalar; # 或者 print "The scalar's value is $var_scalar\n"; print "The scalar's value is", $var_scalar, "\n"; # 用@後接變數名來表示一個陣列 # 陣列保存列表,列表是標量集合 @var_array = (1, 2, 3, "a", "b", "c"); # 或者 @var_array = qw(1 2 3 a b c); @var_array = qw/1 2 3 a b c/; print "The 2nd elm of var_array is $var_array[1]\n"; # 陣列切片 # 1. 輸出陣列中某兩個值 print @var_array[0, 2], "\n"; # 2. 用連接符..輸出陣列中一個區間中的所有值 print @var_array[0..3], "\n"; # 用%後接變數名表示一個hash,即"鍵值對"的集合 # = >符號左邊是鍵,右邊是值 %var_hashes = (a => "Apple", b => "Blizzard"); print "One elm of var_hashes is $var_hashes{\"b\"}\n"; # 用keys()或values()兩個函數分別獲取hash表的所有鍵或所有值 my @allKeys = keys %var_hashes; my @allValues = values %var_hashes; # 常用內建變數 # $_ 默認變數 # @_ 默認陣列變數,保存傳遞給子程序的所有參數 # $! 當前錯誤信息 # $0 當前腳本的文件名 # $$ 當前腳本的進程號 # @ARGV 命令行參數列表 # 內建操作符和操作函數 ### 數值運算子 # +, -, *, / # ==, !=, <, >, <=, >= # +=, -=, *= # &&, and # ||, or # != not # = 附值 # % 取餘數 # < = > 如果左邊大於右邊返回-1,否則 +1 # ++, --, ** # ^ ### 字串運算子 # eq equality # ne inequality # lt less than # gt greater than # le less than or equal # ge greater than or equal # . 串連兩個字符串 # x 重複字符串 # .. 以..符號相端點,創建一串值 print "Baidu"x3; print "\n"; # 變數作用域 # 主要有my和local兩種作用域 # my,聲明的層次&同一層次 # local, 聲明的層次&以內層次 my $var_my_scope; local $var_local_scope; # 不加my或local,默認為全局作用域 # !建議不要用過多全局的變數 # !建議在腳本開頭加上如下兩句: use strict; use warnings; # 這樣,解釋器會強制你使用my或local來表示變數的作用域, # 這樣做可以幫你檢查到一些普通的編程錯誤 # 條件判斷和循環控制 # if, while, for, foreach,until, unless # if my $isOK = 1; if ($isOK) { # ()和{}在這裡都是必須使用的 print "OK\n"; } else { print "Ooops...\n"; } # 或者這樣寫: print "OK\n" if $isOK; # while my $count = 10; while($count > 0) { print "while ... $count\n"; $count -= 1; } # 因為foreach的存在,for在Perl中用得很少,它的寫法和C一樣 my @array = (1, 2, 3, "a"); foreach my $elm (@array) { print $elm, "\n"; } # 文件操作,即IO # open()函數打開一個文件 # 讀文件$file,將文件的標識符附給$fileHandle my $file2open="./1.txt"; my $fileHandle; open($fileHandle, "<$file2open"); # <>符號用於讀取$fileHandle指向的內容 # 利用鑽石操作符號<>,你可以: # 1. 將$fileHandle指向的內容附給一個標量,這樣只讀一行就over # my $line = <$fileHandle>; # 2. 將$fileHandle指向的內容附給一個陣列,將每一行作為一個element # my @lines = <$fileHandle>; # 3. 常用於while或者foreach foreach (<$fileHandle>) { print $_; } # 寫文件$file open($fileHandle, ">$file2open"); print $fileHandle "abc"; # 追加寫入 open($fileHandle, ">>$file2open"); print $fileHandle "def"; # 關閉文件 close($fileHandle); # 子程序 # @_ 符號包含所有傳遞給子程序的參數 sub subFunc1 { print "\nsubroutine 1\n"; } sub subFunc2 { print "subroutine 2\n"; return "I like Perl.\n"; } sub subFunc3 { my ($param1, $param2) = @_; print $param1, $param2, "\n"; } # calling subroutine subFunc1(); # 或者 &subFunc1; print subFunc2(); subFunc3("Ooops...", 123); # 正則表達式 # 查找:在$re_test中查找oo # =~是綁定操作符 my $re_test = "Google"; if($re_test =~ /oo/) { print "Bingo!\n"; } # 替換;在$re_test中用xx替換oo if($re_test =~ s/oo/xx/){ print $re_test, "\n"; } # 匹配修飾符 # i, g my $re_test2 = "FacebOok"; if($re_test2 =~ /oo/i){ print "Bingo!\n"; }
0 意見:
張貼留言