perl6學習
Table of Contents
1 寫在perl6之前
從95年到現在,很多年過去了,從perl6計劃開始到現在,也有10年的時間了。 所有的事物都在不斷的發展,或許perl6還要再開發10年,或者20年,但是未來 總是屬於perl6的。與其等到40歲的時候再去學習一項新的東西,不如從現在開 始就積極擁抱perl6。
2 perl6的安裝
perl6的官方網站:perl6.org。上面有perl6相關的東西。其中Compilers 是Rakudo,也就是perl6的編譯器。我們從這裡面可以得到具體的安裝資訊。我 所有的工作都是在Ubuntu下進行的。在rakudo.org裡面我們可以下載。或者我 們可以用git來進行安裝。在下載下來的rakudo中有一個install的檔案,這裡 包含了安裝rakudo所需要的東西,和安裝的資訊,裡面用Ubuntu作為例子,你 可以根據這個來進行安裝。 安裝完成以後,修改一下環境變數,vim .bashrc,然後新增perl6所在的目錄 就可以了。
3 學習perl6
我看的第一份資料是是從perl6.org/documentation/ 裡下載的Perl 5 to perl 6.還有doc.perl6.org裡面的的東西。 首先perl6中不用use strict;和use warnings;了,用了反而會報錯。
3.1 字串
用法
1: my $fve = 5; 2: print "an interpolating string, just like in perl $five\n"; 3: say 'say() adds a newline to the output,just like in perl 5.10'; 4: say 'new line with out \n"; 5: #這裡的一個新的特性就是,say自動新增換行符。不用你手動加入了
貌似雙引號的功能也有所改變,但是怎麼改變的還沒有具體的看到。
字串被雙引號包括(變數內插)或者用單引號,反斜槓和perl5一樣。 變數內插的規則有了一些變化,下面的情況將被變數內插
1: my $scalar = 6; 2: my @array =1,2,3; 3: say "Perl $scalar"; 4: say "An @array[]"; #空索引,結果是整個陣列,1,2,3 5: say "@array[1]"; 6: say "Code:{$scalar*2}";#大括號中的部分會被看成程式碼,結果是內插的,結果是12
陣列和hash只有在後面跟著索引的時候,或者跟著以()結尾的方法的時候才會變數內插。 如”some $obj.method()"),空的索引內插整個hash或者陣列。
3.2 陣列
陣列相關新方法
1: @array.keys(); #取得陣列的下標 2: @array.values(); #取得陣列的值 3: @array.kv(); #下標和值一起取得 4: @array.elems(); #元素的個數 5: @array.exists(num); #判斷某個下標值是否存在, 6: @array.max(); #最大值 7: @array.min(); #最小值
1: my @array = 1,2,3,'foo'; #括號不再需要 2: my $sum = @array[0]+@array[1]; #單個陣列元素也是以@開頭 3: my @array[1,3]; #陣列切片仍然可用 4: my $num_of_element = @array.elems; 5: #元素的個數,在perl6中通過這種方式,而不是各種奇怪的符號, 6: my $num_of_element = +@array #是求元素個數的另外一種方法。 7: my $last_item = @array[*-1]; #陣列的最後一個元素 8:
1: @array.pick(num); #隨機取出陣列中的不重複元素 2: #例子 3: my @array = <a b c d e>; 4: say @array.pick(4); 5: say @array.pick(*);#*代表所有元素
所有的都是物件,你可以call mechods on arrays;
1: my @array = <5 7 3 6>; 2: ' #以前這樣寫@array = qw/5 7 3 6/;現在可以按照上面的方法寫 3: my @b = @a.sort; #對@array使用方法“排序” 4: say @b; #結果為3 5 6 7 5: say @b.elems; #陣列元素,結果為4 6: if @b > 2 {say “yes”} 7: say @b.end; #最後一個元素的下標,結果為3 8: my @c = @b.map ({$_*2}); 9: say @c; #結果為6 10 12 14 10:
3.3 hash
1: my %drinks = 2: France => 'Wine', 3: Bavaria => 'Beer', 4: USA => 'Coke'; 5: say "The people in France love ",%drinks{'France'}; 6: my @countries = %drinks.keys.sort; 7: #%drinks{'France'};現在的用法 8: #$drinks{France}; 以前的用法 9: #%drinks<France>; 現在也可以這樣用
所有的內建方法,可以是method也可以是一個子程式,所以這兩種方法 都對,sort @array @array.sort.
最後你要知道,所有的[..] {..}(occurring direct after a term) 僅僅是在使用一個特定的方法,而不是和陣列和hash想相聯絡的。
1: my $a = [1,2,3]; 2: say $a[2]; #3 3: #this implies that you don't need special dereferencing syntax,and that you can 4: #act as arrays, hashes and subs at the same time.沒整明白???
3.4 Types 型別
在perl6從都有型別,所有的東西都可以看成一個物件,都有一個型別。 變數也可以有一個型別的約束,但是不是必須需要一個型別。
1: 'a string' #str字串 2: 2 #int整數型 3: 3.14 #Rat (rational number)有理數 4: (1,2,3) #Seq列表 5: #所有的內建型別都是大寫字母開頭,所有的標準型別都是繼承了Any,並且所有的都繼承了Mu 6: 7: #你可以在宣告的時候,加上型別 8: my Numeric $x = 3,4; 9: my $Int @a 1,2,3; 10: 11: #對一個陣列型別的型別定義,作用在陣列的元素上, 12: #Str @s @s這個陣列只能夠包含字串元素的陣列 13: 14: #一些型別是隸屬與一個大的分類,比如:整數型(Int),有理數(Rat),浮點型(Num)都是屬於 15: #Numeric這個大的型別 16: 17: #要知道一個物件的型別,可以使用.WHAT的方法 18: say "foo".WHAT; 19: #如果你要確定一個特殊型別的方法,還有一個方法, 20: if $x ~~ Int 21: { 22: say 'Variable $x contains an integer'; 23: }
我們需要型別的原因
1.程式設計更加安全
如果你宣告瞭一個特殊的型別,那麼你可以執行特定的某種操作,而不用檢查
2.可優化的
如果在編譯的時候提供了型別,那麼執行的程式會有明顯的優化。在原則上perl6 不會比C慢
3.可擴充套件型
有了型別資訊和多重的操作路徑,你可以很容易對特定的型別改善操作
3.5 基本的控制結構
perl6 和perl5 的控制結構基本相同,最大的不同是你不必在if,while,for等,後面新增 小括號了。事實上所有的標示符後面緊跟著小括號,都會被看成在呼叫子程式一個名稱為if的子 程式,for後面加一個空格,可以改善這種情況,但是直接省略括號更加安全。
if控制結構
1: #if結構是變化最小的,你依然可以用elsif和else,unless也還在,但是在unless後面不允許else 2: #分支結構 3: if $sheep == 0 {say "how boring";} 4: elsif $sheep ==1 {say "one lonely sheep";} 5: else {say "a herd,How lovely!";} 6: 7: #你依然可以這樣用 8: say "you won" if $answer == 42;
Loops
1: for 1..100 -> $x 2: { 3: say $x;#會輸出1 2 3 。。 4: } 5: #->$x{..}被稱為‘pointy block'如同匿名子程式或者lisp中的lambda 6: #也可以有不止一個的迴圈變數 7: for 0..5 ->$even,$odd 8: { 9: say "Even: $even \t Odd: $odd"; 10: } 11: #結果如下: 12: #Event:1 Odd:2 13: #也就是交替出現 14: 15: #這個也是hash的迭代的方法 16: my %hash= 17: a => 1, 18: b => 2, 19: c => 3; 20: for %hash.kv -> $key,$value 21: { 22: say "$key: $value"; 23: } 24: 25: #C-風格的for迴圈 26: loop (my $x=1;$x<100;$x**2) 27: { 28: say $x; 29: }
Date: 2013-05-19 14:55:01 CST
HTML generated by org-mode 6.33x in emacs 23
相關文章
- Perl6 檔案相關內容
- 學習學習再學習
- 深度學習——學習目錄——學習中……深度學習
- 深度學習(一)深度學習學習資料深度學習
- 深度學習學習框架深度學習框架
- 強化學習-學習筆記3 | 策略學習強化學習筆記
- 學習產品快報09 | “CSDN學習”:增加學習提醒,提示學習不忘記
- 【強化學習】強化學習/增強學習/再勵學習介紹強化學習
- 學習ThinkPHP,學習OneThinkPHP
- 前端學習之Bootstrap學習前端boot
- 學而習之,成就學習
- 前端週刊第62期:學習學習再學習前端
- 深度學習+深度強化學習+遷移學習【研修】深度學習強化學習遷移學習
- 強化學習-學習筆記2 | 價值學習強化學習筆記
- Golang 學習——interface 介面學習(一)Golang
- Golang 學習——interface 介面學習(二)Golang
- 深度學習學習7步驟深度學習
- 《JAVA學習指南》學習筆記Java筆記
- Go學習【二】學習資料Go
- java學習之道 --- 如何學習java?Java
- 免殺學習-基礎學習
- 強化學習10——迭代學習強化學習
- 程式設計學習MarkDown學習程式設計
- this學習
- 學習
- 【區塊鏈學習】《區塊鏈學習指南》學習筆記區塊鏈筆記
- Flutter學習記錄(一)Dart學習FlutterDart
- 從學習語文聊聊如何學習
- kitten 學習教程(一) 學習筆記筆記
- 整合學習(一):簡述整合學習
- 學習態度和學習計劃
- 學習筆記----圖論學習中筆記圖論
- 酷學習:學習可以很酷很好玩
- 強化學習-學習筆記13 | 多智慧體強化學習強化學習筆記智慧體
- 學習程式設計 vs 學習電腦科學程式設計
- 駁 《駁 《駁 《駁 《停止學習框架》》》》、《駁 《駁 《停止學習框架》》》、《駁 《停止學習框架》》、《停止學習框架》框架
- 學習筆記【深度學習2】:AI、機器學習、表示學習、深度學習,第一次大衰退筆記深度學習AI機器學習
- 學習英語,首先還是要有學習的習慣