Perl的隐藏功能?

Perl中有哪些真正有用但深奥的语言特性,你实际上可以用它来做有用的工作?

指南:

  • 尝试限制对Perl核心而不是CPAN的答案
  • 请举个例子和一个简短的描述

  • 隐藏功能也可在其他语言中找到隐藏功能:

    (这些都来自Corion的答案)

  • C
  • 达夫的设备
  • 便携性和标准
  • C#
  • 引号用于空格分隔的列表和字符串
  • 别名的命名空间
  • Java的
  • 静态初始化器
  • JavaScript的
  • 职能是一等公民
  • 阻止范围和关闭
  • 通过变量间接调用方法和访问器
  • 红宝石
  • 通过代码定义方法
  • PHP
  • 普及的在线文档
  • 魔术方法
  • 符号参考
  • 蟒蛇
  • 一行换行
  • 可以用自己的功能替换核心功能
  • 其他隐藏功能:

    运营商:

  • bool准运算符
  • 触发器操作员
  • 也用于列表构造
  • ++和一元-运算符处理字符串
  • 重复运算符
  • 太空船操作员
  • || 运算符(和/或运算符)从一组选项中进行选择
  • 钻石经营者
  • m//运算符的特例
  • 波浪符号“操作符”
  • 引用构造:

  • qw操作员
  • 字母可以用作q {}类似结构中的引号分隔符
  • 引用机制
  • 语法和名称:

  • 印后可能有空格
  • 您可以使用符号引用提供子数字名称
  • 法律追踪逗号
  • 分组整型文字
  • 散列片
  • 填充数组中的哈希键
  • 模块,Pragma和命令行选项:

  • 严格使用并使用警告
  • 污点检查
  • 深奥的使用-n和-p
  • CPAN
  • overload::constant
  • IO :: Handle模块
  • 安全隔间
  • 属性
  • 变量:

  • 自动激活
  • $[变量
  • 领带
  • 动态范围
  • 用单个语句进行变量交换
  • 循环和流量控制:

  • 魔法转到
  • for一个单一的变量
  • 继续条款
  • 绝望模式
  • 常用表达:

  • G
  • (?{})和'(?? {})`在正则表达式中
  • 其他特性:

  • 调试器
  • 特殊的代码块,如BEGIN,CHECK和END
  • DATA
  • 新块操作
  • 源过滤器
  • 信号钩
  • 地图(两次)
  • 包装内置功能
  • eof函数
  • dbmopen函数
  • 将警告转化为错误
  • 其他技巧和元答案:

  • cat文件,如果需要解压缩gzip
  • Perl技巧

  • 也可以看看:

  • C的隐藏功能
  • C#隐藏的功能
  • C ++的隐藏功能
  • Java的隐藏功能
  • JavaScript的隐藏功能
  • Ruby的隐藏功能
  • PHP的隐藏功能
  • Python的隐藏功能
  • Clojure的隐藏功能

  • 在使用文件句柄返回的记录(通常是行)循环时,触发器操作符可用于跳过第一次迭代,而不使用标志变量:

    while(<$fh>)
    {
      next if 1..1; # skip first record
      ...
    }
    

    运行perldoc perlop并搜索“flip-flop”以获取更多信息和示例。


    Perl中有许多非显而易见的特性。

    例如,你知道签名后可以有一个空格吗?

     $ perl -wle 'my $x = 3; print $ x'
     3
    

    或者如果您使用符号引用,您可以提供subs数字名称?

    $ perl -lwe '*4 = sub { print "yes" }; 4->()' 
    yes
    

    还有一个“bool”准运算符,返回1表示真实表达式,空字符串表示为false:

    $ perl -wle 'print !!4'
    1
    $ perl -wle 'print !!"0 but true"'
    1
    $ perl -wle 'print !!0'
    (empty line)
    

    其他有趣的东西: use overload可以重载字符串文字和数字(例如使它们成为BigInts或其他)。

    这些东西中的许多实际上都是在某个地方记录下来的,或者从记录的功能中按照逻辑进行记录,但是有些并不是很知名。

    更新:另一个不错的。 下面提到了q{...}引用构造,但是您是否知道可以使用字母作为分隔符?

    $ perl -Mstrict  -wle 'print q bJet another perl hacker.b'
    Jet another perl hacker.
    

    同样,你可以编写正则表达式:

    m xabcx
    # same as m/abc/
    

    通过魔术ARGV添加对压缩文件的支持:

    s{ 
        ^            # make sure to get whole filename
        ( 
          [^'] +     # at least one non-quote
          .         # extension dot
          (?:        # now either suffix
              gz
            | Z 
           )
        )
        z           # through the end
    }{gzcat '$1' |}xs for @ARGV;
    

    (引用周围$ _来处理带有shell元字符的文件名)

    现在, <>功能将解压所有以“.gz”或“.Z”结尾的@ARGV文件:

    while (<>) {
        print;
    }
    
    链接地址: http://www.djcxy.com/p/42803.html

    上一篇: Hidden features of Perl?

    下一篇: Check if number is between given range