zoukankan      html  css  js  c++  java
  • 常见简写和双关语

    1.使用列表赋值来进行变量对调

    perl会先计算等号右边的表达式,然后对应位置赋值:

    $b,$a)= ($a,$b) ;
    ($c,$a,$b) = ($a,$b,$c) ;
    #数组切片让你用简单的语法随意置换数组的内容
    @a[1,3,5] = @a[5,3,1] ;

    2.用[] 或 () [] 转为列表上下文

    my @words = split /\+/, (/([^:]*)/)[0] ;

    引用操作符施加在列表上,只会返回一个新的列表,而非数组引用。

    my $word_ref = \ (split /\++/,$str) ; #错误
    my $word_ref = [split /\++/,$str]  ;  #正确

    3. 用=>构造键值对

    大箭头操作符=>的功能其实与逗号操作符差不多,唯一的差别是:如果=>左边能识别成一个单词,那么perl会自动将它当成一个字符串,而不是函数调用。

    4.用=>指明操作方向

    作为“语法糖”来指明操作方向。例如在rename函数中

    rename "$file.c" => "$file.c.old";

    5. 小心使用{}

    my @a = @{func_returning_arrayref} ;   #错误
    my @a = @{func_returning_arrayref()} ; #正确
    my @a=  @{&func_returning_arrayref};   #正确
    my @a=  @{+func_returning_arrayref};  #正确

    6 用@{[]}  或 eval{} 的形式来复制列表

    Perl里面没有提供复制数据结构的函数,如果需要一份列表的的匿名副本,可以把列表放在匿名列表构造操作符中,然后对它进行解引用。

    my @missing_h = grep {  s/\c$/\.h/ and ! -e }  @{[@cfiles]};

    另一种产生临时副本的方法是把它放在eval块中,它能返回块内部最后一个表达式的计算结果。

    my @missing_h = eval { @cfiles };

    提示:尽量使用eval方式,比前一种方式更加高效。

    不过遇到这种情况还应该考虑是否真正需要临时副本。 在前面的例子中,完全可以在grep做些改进,引入一个$_变量的临时副本就可以了。

    my @missing_h = grep {  my $h= $_; $h =~  s/\c$/\.h/ and !  ( -e $h)  }  @cfiles;

    以上方法都是“影子副本”既完整的独立的副本。 如果原始列表中的元素是引用的话,复制的结果和原始数据共享数据。

    如果确定需要一份完全独立的深层副本。 请使用Storable 模块的 dclone 函数:

    use Stroeabl qw(dclone);
    
    my @copy_ref = dclone(\@array);
  • 相关阅读:
    (视频)Erich Gamma 与 Visual Studio Online 的一点野史
    三维重建技术概述
    三维重建基础
    用户故事驱动的敏捷开发 – 2. 创建backlog
    用户故事驱动的敏捷开发 – 1. 规划篇
    TFS 10周年生日快乐 – TFS与布莱恩大叔的故事
    【DevOps敏捷开发动手实验】开源文档 v2015.2 stable 版发布
    看见的力量 – (II) 影响地图
    看见的力量 – (I) 解题的思维
    UDAD 用户故事驱动的敏捷开发 – 演讲实录
  • 原文地址:https://www.cnblogs.com/tjxwg/p/2936141.html
Copyright © 2011-2022 走看看