zoukankan      html  css  js  c++  java
  • perl学习之裸字

    use strict包含3个部分。其中之一(use strict "subs")负责禁止乱用的裸字

    这是什么意思呢?

    如果没有这个限制,下面的代码也可以打印出"hello"。

    my $x = hello;
    print "$x
    ";    # hello
    

    这样使用不符合我们平常把字符串放在引号里的习惯,但是Perl默认是允许(使用)裸字——没有引号的单词——来作为字符串。

    上面的代码输出"hello"。

    当然至少在脚本顶部默认添加"hello"函数之前(是这样):

    sub hello {
      return "zzz";
    }
    
    my $x = hello;
    print "$x
    ";    # zzz
    

    在新版本中,Perl看到了hello()函数,调用它(函数)并将结果赋值给$x。

    之后,如果有人将这个函数放在文件的结尾(赋值之后),Perl在赋值的时候就看不到函数,又回到老样子了:把"hello"赋给$x。

    是的,你肯定不想自己陷入麻烦。那么请在代码中使用use strict来禁止裸字hello出现在代码中,从而避免困惑。

    use strict;
    
    my $x = hello;
    print "$x
    ";
    

    会给出如下错误:

    Bareword "hello" not allowed while "strict subs" in use at script.pl line 3.
    Execution of script.pl aborted due to compilation errors.
    

    裸字的正确使用

    即便开启了use strict "subs"还是有些地方可以使用裸字。

    首先,用户自定义的函数名就是裸字。

    同样,在提取哈希表元素花括号里也使用了裸字,以及胖箭头=>的左边也可以没有引号。

    use strict;
    use warnings;
    
    my %h = ( name => 'Foo' );
    
    print $h{name}, "
    ";
    

    上面代码中的"name"都是裸字,它们在use strict的时候也是有效的。

  • 相关阅读:
    置换群
    背包问题
    并查集
    链式前向星
    一个简单的金额平均分配函数(C#版)
    EasyUI ComboGrid的绑定,上下键和回车事件,输入条件查询
    Oracle表解锁语句
    如何将两个json合并成一个
    textbox只能输入数字或中文的常用正则表达式和验证方法
    C#注册表的读,写,删除,查找
  • 原文地址:https://www.cnblogs.com/chip/p/4239893.html
Copyright © 2011-2022 走看看