首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Perl6 vs Perl5 之我见(1)

Perl6 vs Perl5 之我见(1)

前言Perl6 诞生2000 年 7 月 19 号,在一场无聊沉闷的政治组织会议中,Jon Orwant 站在一边听了几分钟,然后很淡定的走向咖啡桌,拿起一个个杯子往对面的墙上扔去,边扔边说“我们得想办法激励社群,不然都完了,大家越来越无聊,都去做别的事了。我不管您们怎么做,可您们得搞些大事出来。”,然后他掉头就走,这场事件,触发了 Perl6 诞生的火苗。经过十年的磨砺,2010 年 7 月 29 号,Perl6 的第一个实现版 Rakudo Star 终于发布了,这头曾经背负重担的骆驼轻装上路了。
Perl5 是用 C 写的核心,虽然已经很成熟,但核心代码太庞大,充满了各种难以理解的调用,且对多线程、unicode 的支持并不好, Perl6 相对 Perl5    做出了革命性的变革,除了更完美的支持线程、unicode 之外,可靠信号控制在一开始设计的时候就已经被加进去,新的内核更小、速度更快、外部扩展 API 更加清晰,在过去的二进制兼容问题也会被彻底解决掉。
START安装 Perl6,可以从以下网址下载 , 安装步骤如下:
安装 Perl6$ cd rakudo$ perl Configure.pl --gen-parrot --gen-nqp$ make$ make install参数–gen-parrot 实际上是在调用 svn 或 git 生成合适的 Parrot 才能编译它,Parrot 是 Perl6 相关计划书中支援 Perl6 的 Virtual Machine,也就是说, Perl 程序将在 Parrot 上执行,程序所面对的是个共通的跨平台 Virtual Machine 环境,而不用考虑您所面对的 OS 环境,就像 Java、.NET 所使用的 VM 一样。参数-gen-nqp 会下载一份 NQP,NQP 是一个小型的 Perl6 编译器,用来构建 Rakudo,Rakudo 是用于 Parrot 虚拟机上的编译器。
安装完之后,进入安装目录,并运行./Perl6,当您在 $ 后面见到 > 时,您就进入了 Rakudo 的环境中,可以执行一些东西见到 Rakudo 的响应,如:
运行 Perl6$./perl6>say “Hello world!”;>Hello world!而在 Perl5 中,运行./perl 后直接停留在当前状态,不会进入用户交互状态。
变量和类型数组Perl6 对数组和哈希的定义无需括号,如:
Perl6 中数组定义@a = "hello", "world";say @a;输出:
helloworld这里,say 函数是 Perl6 中新引入的一个函数,功能就是将一行文本打印到终端。
Hash在 Perl6 中对哈希值的访问,键值如果用双引号则需用{}, 如果不用双引号,则需用<>, 如:
Perl6 中 Hash 定义my %a = "first" => 1, "second" => 2, "third" => 3;say  %a{“first”};say  %a<second>输出:
12如果不使用=>符号定义 hash,还可以使用副词语法,如下:
副词语法my %bar = :first(1), :second(2), :third(3);副词语法提供了为数值命名,在 Perl6 中不仅仅用在 hash,很多地方都会用。
类型在 Perl 5 中,$scalar 的标量只能包含二种东西引用或值,这值可以是任何东西,可以是整数、字符、数字、日期和您的名字,这通常是非常方便的,但并不明确。在 Perl6 中给您机会修改标量的类型 。如果您这个值比较特别,您可以直接放个类型名在 my 和 $variable 的中间。像下面的例子,是在设置值一定要是一个 Int 型的数据,来节约 cpu 判断类型的时间,和让您更少在程序上出错。
my Int $days = 24erl6 提供了很多内置数据类型,最基础的有:
  • Bool : 布尔值,是枚举类型,只能是 true 或者 false。
  • Int: 整数型。
  • Array: 数组类型,通过整数索引。
  • Hash: 哈希类型,通过字符串名索引。
  • Num: 浮点数值。
  • Complex: 复杂数据类型,如虚数。
  • Pair:  将字符串名和数据对象的绑定。
  • Str: 字符串数据对象。
我们可以通过 WHAT 函数来判断数据的类型,如:
WHAT 函数my $a=3; say $a.WHAT输出:
Int()此外,我们还可以通过一些特殊操作符对数据类型进行转换,如:
数据类型转换my $num = +(“3”);  //+()将字符转换为数值my @arr = @(“key” => “value”);   //@()将 hash 转换为数组my $sca = $(2..4) ;//$()将列表转换为标量,这里 sca 为列表元素个数 3my $str = ~3; //~()将数值转换为字符my %hash = %(“a”,”1”,”b”,”2”);//%()将列表转换为哈希
返回列表