免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5912 | 回复: 9
打印 上一主题 下一主题

perl6 学习笔记 - (数据相关) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-18 14:27 |只看该作者 |倒序浏览

  1. Perl6 入门学习笔记

  2. 一 动手试验环境 pugs
  3. 1.pugs 下载
  4.         [url]http://www.jnthn.net/perl6/pugs-win32.zip[/url]

  5. 2.pugs 安装
  6.         需要安装 perl5.8
  7.         解压缩后即可使用(windows环境)

  8. 3.pugs环境测试
  9.        
  10.         命令行:
  11.         cd c:\pugs
  12.         c:\pugs>pugs.exe
  13.         c:\pugs>say “hello pugs!\n”;
  14.   
  15.         执行文件:
  16.         pugs hell.p6   # 注意文件后缀为 .p6
  17.        
  18. 可参照 [url]http://www.programmersheaven.com/2/Perl6-QuickStart[/url]

  19. 二 数据
  20. I. 字符串
  21. 1.定义
  22.         my $str1 = "this is a";
  23.         my $str2 = "$str1 pig"; #运行结果 this is a pig
  24.         my $str3 = '$str1 pig'; #运行结果 $str1 pig
  25.        
  26. 2. qq q 等的使用
  27.         my $str1 = qq(this is a);
  28.         my $str2 = qq($str1 pig); #运行结果 this is a pig
  29.         my $str3 = q($str1 pig);  #运行结果 $str1 pig
  30.        
  31. 3. {}的使用
  32.         my $str1 = "{1 + 1}";  # 结果是2 不是{1+1}
  33.        
  34. II. 列表
  35. 1.定义
  36.         my @list1 = ("123","abc","1a3");
  37.         my @list2 = ("A".."Z"); # ABCD..Z 从A到Z
  38.         my @list3 = (1..100);   # 从1到100
  39.        
  40. 2.字符串列表
  41.         my @list = qw(123 abc ddd);
  42.         my @list = <123 abc ddd>;   # 新的标记法 功能相同
  43.        
  44. III. 数组
  45. 1. 定义
  46.         my @array;
  47.         my @array = ("123","abc","1a3");
  48.         my @array = qw(123 abc ddd);
  49.         my @array = <123 abc ddd>;
  50.        
  51. 2. 赋值
  52.         my @array[0] = 1;  # 注意不是$array[0]
  53.         my $value = @array[0];
  54.         my $value = @array.[0];
  55.        
  56.         slice的使用
  57.         my @values = @array[2,0,1]; #元素位置交换
  58.        
  59.         my @values = ( @array[2], @array[0], @array[1] ); # 相同写法
  60.        
  61.         my @values = @array[(2, 0, 1)]; # 相同写法
  62.        
  63.         my @slice = (2, 0, 1);
  64.         my @values = @array[@slice];  # 相同写法
  65.        
  66. 3. 数组的方法 (.操作符)
  67.        
  68.         3.1 延续Perl5的方法  shift unshift pop push splice join
  69.         @array.shift; #新的写法
  70.         shift @array; #相同
  71.        
  72.         3.2 grep map 不变
  73.        
  74.         3.3 新的可用方法
  75.        
  76.                 @array.keys();      # 取得数组的下标
  77.                 @array.values();    # 取得数组的值
  78.                 @array.kv();         # 下标和值一起取得 可以理解为hash的each
  79.                 @array.elems();      # 元素个数
  80.                 @array.exists(num);  # 指定下标数存在返回真 不存在返回假
  81.                 @array.delete(num); # 删除指定下标元素 复数可
  82.                 @array.max();                 # 最大值
  83.                 @array.min();                 # 最小值
  84.                                                                
  85.                 my @array = <a b c d e>;
  86.                 say @array.keys();     # 01234
  87.                 say @array.values();   # abcde
  88.                 say @array.kv();        # 0a1b2c3d4e
  89.                 say @array.elems();     # 5
  90.                 say @array.exists(4);   # 1 如果say @array.exists(6);结果为假
  91.                 say @array.delete(1,3);# 删除元素b和d  数组只剩下元素ace
  92.                
  93.         3.4 需要特殊注意新的可用方法       
  94.                
  95.                 3.4.1 @array.pick(num);   # 随即取出数组中的不重复元素  类似于rand函数(rand可能取得重复的)
  96.                
  97.                 my @array = <a b c d e>;
  98.                 say @array.pick(5);                # 结果例 eabdc 注意:不会重复
  99.                 say @array.pick(*);                # * 代表全部元素
  100.                 扩展
  101.                 my @array = <z z>;
  102.                 say @array.pick(2); # ("z", "z")
  103.                 say @array.pick(3); # ("z", "z")
  104.                 say @array.pick(3,:repl); # ("z", "z", "z") :repl 取消限制  注意pugs测试未通过
  105.                
  106.                 ——————————————————————————————————————————————————————————————————————————————
  107.                
  108.                 3.4.2 @array.first(block); # 返回最初的block中为真的值
  109.                
  110.                 my @array = (1 .. 10);
  111.                 my $result = @array.first( { ($_ == 4) } ); # 4 注意pugs测试未通过
  112.                
  113.                 ———————————————————————————————————————————————————————————————————————————————
  114.                
  115.                 3.4.3 reduce(block, @array);# 简化操作 # 相当于定义一个规则 根据这个规则进行类推计算
  116.                
  117.                 my @array = <1 3 5 7>;
  118.                 say reduce { $^a + $^b }, @array; # 16
  119.                 #第一步 先将 1 和 3 看作是  $^a 和 $^b 计算结果为 1+3=4
  120.                 #第二步 将1和3的结果4看做是 $^a 将下一项 5看做是$^b 再进行计算 4 + 5 = 9  以此类推
  121.                
  122.                 # 相当于定义一个规则 根据这个规则进行类推计算
  123.                 reduce { $^a + $^b + $^c }, @array;
  124.                
  125. IV. 范围类型 (range)  # 不知道应该叫什么 大骆驼里面把 .. 叫做范围操作符 暂且叫做范围类型吧
  126. 1.        定义                #个人观点 因为带有$符号 可以理解为带有方法的特殊字符串
  127.         my $range = 1 .. 5;     
  128.         my $range = "a" .. "c";

  129.     my @array = $range; # 可以给数组初始化
  130.        
  131. 2.        方法
  132.         延续perl5的方法:
  133.                 $range.shift();
  134.                 $range.pop();
  135.                 $range.reverse();
  136.                
  137. V.        pair类型         
  138. 1.        定义  
  139.        
  140.         简单理解就是 散列的一行数据    #个人观点 因为使用$符号 也可以理解为带有方法的特殊字符串
  141.        
  142.         my $pair = "key" => "value";
  143.         my $pair = :key<value>;                 #相同
  144.        
  145.         用法:
  146.         my $pair = (:key);
  147.         my $pair = ("key" => 1); # 同じこと
  148.        
  149.         my $pair = "key" => ("value-key" => "value-value");
  150.         say $pair.value.key;         # 结果 value-key  值的key
  151.         say $pair.value.value;  # 结果 value-value  值的值

  152.         my $pair = ("key-key" => "key-value") => "value";
  153.         say $pair.key.key;         # 结果 key-key  key的key
  154.         say $pair.key.value; # 结果 key-value  key的值
  155.        
  156.         和hash的关系:
  157.         my %hash  = ('key1' => 'value1',
  158.                                  'key2' => 'value2',
  159.                                  'key3' => 'value3',       
  160.                                 );
  161.         my $pair = %hash.pairs().[0];
  162.         say $pair;    #  key1 value1
  163.        
  164. 2.  给key 和 value 赋值

  165.         my $pair = ("key" => "value");
  166.         $pair.value = "newvalue";
  167.         $pair.key   = "newkey";
  168.        
  169. 3.  方法

  170.         $pair.key();
  171.         $pair.value();
  172.        
  173.         $pair.kv(); # 与hash里的each类似
  174.         my ($key, $value) = $pair.kv();
  175.        
  176. VI        散列
  177. 1.        定义
  178.         # 注意 my %hash = ( key => value );  缺少引号在pugs下不合法  可以采用 my %hash = <key value>;
  179.         my %hash = ( "key" => "value" );  
  180.         my %hash = ( 'key' => 'value' );
  181.         my %hash = hash("key", "value");  #相同
  182.                
  183.         my $pair = ( "key" => "value" );  #新用法
  184.         my %hash = $pair;
  185.        
  186. 2.        赋值
  187.         my %hash{'key'} = 'value';    # 注意这里是 %hash{'key'}  不是 $hash{'key'}
  188.         my %hash<key>  = "value";          # %hash<key> 合法    %hash{key} 在perl6下是不合法的
  189.                
  190.         my $value = %hash{"foo"};
  191.         my $value = %hash<foo>;
  192.        
  193.         my $value = %hash.{"foo"};
  194.         my $value = %hash.<foo>;
  195.        
  196.         my @values1 = %hash{"foo", "hoge"};
  197.         my @values2 = %hash<foo hoge>;
  198.        
  199. 3.  方法
  200.        
  201.         3.1 hash()
  202.          
  203.         my %hash = hash("foo"  => "bar");  #
  204.         my $hash = hash("hoge" => "fuga"); # 注意 这是一个引用
  205.        
  206.         3.2 参照数组的方法
  207.        
  208.         %hash.keys();
  209.         %hash.values();
  210.         %hash.kv();
  211.         %hash.pairs();

  212.         %hash.elems();      # key的个数
  213.         %hash.delete("key");# 删除指定key
  214.         %hash.exists("key");# 指定key存在返回真
复制代码

论坛徽章:
0
2 [报告]
发表于 2008-11-18 15:21 |只看该作者

  1. 三 控制结构

  2. I.        for        的几种使用方法
  3.        
  4.         1.        列表
  5.                 for "123", "abc", "000" {
  6.                     say $_;
  7.                 }
  8.        
  9.                 用例:
  10.                 for <111 abb ccc> {
  11.                            say $_;
  12.                 }

  13.                 for @array {
  14.                     say $_;
  15.                 }

  16.                 for 0 .. 5 {
  17.                     say $_;
  18.                 }
  19.        
  20.         2.  定义变量
  21.        
  22.                 for "123", "abc", "000" -> $str{
  23.                     say $str;
  24.                 }
  25.                
  26.                 for "111", "222", "333", "444" -> $x, $y {    # 注意  列表个数必须是变量个数的倍数 即能整除
  27.                     say $x, " and ", $y;
  28.                 }
  29.                
  30.                
  31.                 for "111", "222", "333" -> $x, $y, $z {              # 注意  列表个数必须是变量个数的倍数 即能整除   
  32.                     say $x, " and ", $y " and ", $z;
  33.                 }
  34.                                
  35. II. loop 用法  相当于C语言中的for语句
  36.        
  37.         1.        my $i = 0;
  38.                 loop ($i = 0; $i < 10; $i++) {
  39.                     say $i;
  40.                 }

  41.         2.  loop (my $i = 0; $i < 10; $i++) {
  42.                     say $i;
  43.                 }

  44.         3.  my $i = 0;
  45.                 loop {
  46.                     $i++;
  47.                     last if $i == 1000;
  48.                 }

  49. III. while用法
  50.        
  51.         1.  my $i = 0;
  52.                 while ($i < 5) {
  53.                     say $i;
  54.                     $i++;
  55.                 };


  56.         2.  my @array = 1..5;
  57.                 while @array.pop -> $x {
  58.                     say $x;
  59.                 }       
复制代码



更多的用法和特性可以参照   http://svn.pugscode.org/pugs/t/spec/

有了这些  可以开始用perl6 干很多事情了

[ 本帖最后由 hitsubunnu 于 2008-11-18 15:25 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-11-18 21:08 |只看该作者
perl6不错   期待

论坛徽章:
0
4 [报告]
发表于 2008-12-08 18:22 |只看该作者
perl 6什么时候可以出来呀,百度和谷歌都搜不到

论坛徽章:
0
5 [报告]
发表于 2008-12-08 20:49 |只看该作者
有个专门讲perl5-perl6的blog
http://perlgeek.de/blog-en/

可惜我现在perl5都没有学好
懒得学perl6

论坛徽章:
0
6 [报告]
发表于 2009-01-16 12:17 |只看该作者
国内做perl的人不多啊

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
7 [报告]
发表于 2009-01-16 13:20 |只看该作者
原帖由 sxy521 于 2009-1-16 12:17 发表
国内做perl的人不多啊

多少算多

论坛徽章:
0
8 [报告]
发表于 2009-01-16 16:19 |只看该作者
谢谢,感觉更严谨了~不错

论坛徽章:
0
9 [报告]
发表于 2009-01-24 06:12 |只看该作者
值得一学呀

论坛徽章:
0
10 [报告]
发表于 2009-01-24 10:08 |只看该作者
装上看看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP