Perl 6 是什么?
Perl 6 是一种逐渐演进的通用的多用途高级语言。Perl 6 是多范式的,它支持过程编程,面向对象编程和函数式编程。
Perl 6 的座右铭:
·TMTOWTDI:There is more than one way to do it.
做一种事不只有一种方法
·简单的事情就应该是简单的,困难的事情应该变得简单,不可能的事情变成困难的事。(Easy things should stay easy, hard things should get easier, and impossible things should get hard.)
Perl 6 术语
Perl 6: 是一种带有测试套件的语言规范,通过该测试套件实现的执行程序可以被认为是Perl 6。
Rakudo:Perl 6 的编译器。
Rakudobrew:Rakudo的安装管理器。
Panda:Perl 6 的模块安装程序。
Rakudo Star:包含Rakudo、Panda、一揽子Perl 6 模块和文档的一个文件集。
安装Perl 6
Linux
1.安装Rakudobrew:https://github.com/tadzik/rakudobrew
2.安装Rakudo:在终端上输入命令
Rakudobrew buildmoar
3.安装Panda:在终端输入命令
Rakudobrew build-panda
OSX
跟Linux中的安装步骤基本相同。
或者安装homebrew:
brew install rakudo-star
Windows
1.下载最新版本的安装程序(带有.MSI扩展名的文件),32位系统请下载x86文件,64位系统请下载x86——64文件:http://rakudo.org/downloads/star/
2.安装完成后添加C:\rakudo\bin到PATH中
Docker
1.获取官方Docker镜像文件
docker pull rakudo-star
2.使用该镜像运行一个容器
docker run -it rakudo-star
运行Perl6代码
Perl 6 的代码运行可以通过使用REPL(Read-Eval-Print Loop)来实现。实现方法是,打开命令行终端,输入perl6后回车。操作结束后会在下一行出现命令提示符“>”。输入一行代码后回车,REPL将会输出该行的返回值。循环该操作可以继续执行下一行代码。输入exit并回车可以离开REPL。
或者,你可以在文件中编写你的代码,保存后再运行。建议Perl 6 脚本文件的扩展名设定为“.pl6″。运行该文件的代码时只需将该文件的文件名“perl6filename.pl6”输入到命令行终端后回车即可。但不像REPL可以直接自动输出每一行的结果,这里要求文件中的代码必须包含“say”等声明才能输出结果。
REPL大多用于测试特殊的一块代码,惯常是仅有一行。对于超过一行代码的程序,建议还是先保存在文件中而后运行。
单行代码也可以非交互的直接在命令行上测试。方法如下:
perl6 -e ‘你的代码’
回车
温馨提示:
Rakudo star捆绑了一个能帮你从REPL中获取最多的行编辑器。
如果你安装单一的Rakudo而不是Rakudo Star,你可能不会拥有可供使用的行编辑(利用上下方向键查询历史;左右方向键以编辑输入;TAB键以完成当前行输入)功能。此时可以考虑运行以下命令,可以设置好上述功能:
panda install Linenoise #Windows,linux,OSX
panda install Readline #在你使用Linux并且偏爱Readline库时
编辑器
上述到大多数情况下我们会将Perl 6程序代码编写并保存到文件中,因此我们需要一个优雅的而且能够识别并支持Perl 6语法的文本编辑器。
从个人角度来说,我推荐正在使用的Atom。这是一个时尚的文本编辑器,能将Perl 6的语法从框中高亮的表示出来。Perl6-fe是相对于Atom的另一种选择,也可以高亮Perl 6的语法,该软件来源于原始的包,但存在很多bug需要修补和编辑。
社区里的其他同伴也有使用Vim ,Emacs 和Padre的。
最新版本的Vim装有高亮语法的功能,Emacs和Padre则需要另行安装额外的包。
Hello World!
我们可以从经典的hello world开始开始Perl 6之旅了
say ‘hello world’;
也可以写成这样:
‘hello world’ .say;
语法概览
Perl 6 是形式自由的。大多数情况下,你可以使用任意数目的空格符。
Perl 6 语句(statement)通常是一行有逻辑的代码,一般需要以分号(;)结尾,例如
say “Hello” if True;
表达式(expression)是一种特殊类型的语句,它将返回执行后的值(value),例如
1+2 #返回3
表达式由项和运算符组成。
项有:
·变量(variables):可以被操作和改变的值。
·常量(literals):不发生变化的值,例如一个数字或字符串。
运算符分类:
| 类型 | 说明 | 举例 |
|前缀(prefix) | 在项之前 | ++1|
|中缀(infix) |在项之间 | 1+2|
|后缀(postfix) |在项之后 | 1++|
|环缀(circumfix) |包围项 | (1)|
|后环缀(postcircumfix) |在一项的后面并且包围另一项 | Array[1]|
标识符
标识符是你在定义项时起得名字。
规则:
·标识符必须以下划线或者字母开头。
·可以包含数字,但不能以数字开头。
·除开头和末尾,且右侧是字母时,中间可以包含连接符和省略福。
|合法标识符| |不合法标识符|
|var1 | |1var |
|var-one | |var-1 |
|var’one | |var’1 |
|var1_ | |var1′ |
|_var | |-var |
命名规范
·Camel case:variableNo1
·Kebab case:variable-no1
·Snake case :variable_no1
你可以自由选择喜欢的方式来命名你的标识符,但采用上述其中一种规范来进行一致性的命名,不失为一种好习惯。
采用具有特定表意的名称会让你(当然也有别人)的编程生活更舒适!
·var1 = var2 * var3 #标识符语法正确,但含义不明显
·monthly-salary = daily-rate * working-days #这会是一种更好的变量命名方式
注释
注释是用以当做备忘的,在执行过程中被编译器忽略的一段文字。
注释可以分为三种类型:
·单独行注释(single line):
# This is a single line comment
·语句中的注释(embedded):
say # `(This is an embedded comment) “Hello World.”
·多行注释(Multi line):
=begin comment
This is a multi line comment.
Comment 1
Comment 2
=end comment
引用
字符串需要使用双引号(””)或者单引号(”)来进行定界。
以下情况一直采用双引号:
·你的字符串包含撇号(’)
·你的字符串中包含需要进行值内插的变量
say ‘Hello World’; #Hello World
say “Hello World”; #Hello World
say “Don’t”; #Don’t
my $name = ‘John Doe’;
say ‘Hello $name’; #Hello $name
say “Hello $name”; #Hello John Doe