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

这是什么意思呢?

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

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

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

上面的代码输出"hello"。

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

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

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

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

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

use strict;

my $x = hello;
print "$x\n";

会给出如下错误:

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}, "\n";

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

perl学习之裸字的更多相关文章

  1. perl学习笔记——输入与输出

    读取标准输入 用<STDIN>进行标准输入:chomp($line=<STDIN>); 如果读到文件尾,行输入操作符就会返回undef.便可利用这一性质跳出循环. while( ...

  2. Perl 学习笔记-高级控制结构

    1.unless控制结构 类似于独立的else语句; 要么条件为真, 要么执行语句块内的代码;  unless(<condition>){code...;} 等价于  if(<con ...

  3. perl学习之路1

    一切要从Hollo world开始 公司要用perl....啊, 不会只能自学了, 毕竟是公司啊, 不是学校...公司不学习就滚蛋了...惨惨惨 因为是学习嘛, 感觉开虚拟机比较麻烦所以直接用了个 瘟 ...

  4. perl学习(8) 控制:unless,until,next,redo,last

    Perl中实现了所有C 的操作符! Perl力求代码最少! 1.1.unless unless的含义是:除非条件为真,否则执行块中的代码,和if正好相反 unless($fred=~ /^[A-Z_] ...

  5. PERL学习笔记---正则表达式的应用

    使用m//匹配 //这是m//(模式匹配)的一种简写.同qw//操作一样,可以使用任何成对的分隔符.因此,可以使用m(fred), m<fred>, m{fred}, m[fred],或者 ...

  6. Perl 学习笔记-哈希

    1.Perl中的哈希 高效快捷, 没有大小限制. 大哈希一样很快! 命名: 和Perl其他标识符一样, 同时拥有自己的的名字空间.  $roger{"sex"} 和 $roger没 ...

  7. Perl 学习笔记-标量数据

    最近学习Perl, 准备看一遍入门指南,关键的东西还是记录下来,以便以后复习和查看参考. 笔记来自<<Perl语言入门第5版>> 1. 在Perl内部,不区分整数值和浮点数值, ...

  8. perl学习---控制:unless,until,next,redo,last

    1.1.unless unless 的含义是:除非条件为真,否则执行块中的代码,和if正好相反 unless($fred=~ /^[A-Z_]\w*$/i){ print “The value of ...

  9. perl学习 之:my local our

    范围声明 和全局声明类似,词法范围声明也是在编译时起作用的.和全局声明不同的是,词法范围声明的作用范围是从声明开始到闭合范围的最里层(块,文件,或者 eval--以先到者为准).这也是为什么我们称它为 ...

随机推荐

  1. [模板](luogu P3387)縮點

    前言:對於這週的咕咕咕表示好像沒什麼好表示的,完全沒有靈感a......寫東西真的好難啊......於是又玩了半天鬼泣4???還挺好玩的 來源:題解 题目背景 缩点+DP 题目描述 给定一个n个点m条 ...

  2. 问题: 查看某个文件的修改记录| git log 高级用法

    参考文章: git查看某个文件的修改历史 5.3 Git log 高级用法 基本步骤 git log --pretty=oneline [文件名] git show [节点] git log 两周高级 ...

  3. Dubbo端口占用错误信息

    SEVERE: Exception sending context initialized event to listener instance of class com.common.SysCont ...

  4. Github开源项目单

    以下涉及到的数据统计与 2019 年 5 月 1 日 12 点,数据来源:https://github.com/trending/java?since=monthly . 下面的内容从 Java 学习 ...

  5. MDX之Case When用法

    with member [Measures].[终端销售数量总计] as sum(ytd([日期].[年月].CurrentMember),[Measures].[终端销售数量]) member [M ...

  6. jsp第一章 动态网页开发基础

    动态网站可以实现交互功能,如用户注册.信息发布.产品展示.订单管理等等: 动态网页并不是独立存在于服务器的网页文件,而是浏览器发出请求时才反馈网页: 动态网页中包含有服务器端脚本,所以页面文件名常以a ...

  7. vue cli 脚手架上多页面开发 支持webpack2.x

    A yuri demo for webpack2 vue multiple page.我看到有一些项目多页面项目是基于webapck1.0的,我这个是在webpack2.x上布置修改.  项目地址:  ...

  8. Eclipse下对MAVEN进行junit软件测试

    一.Maven project management and build automation tool, more and more developers use it to manage the ...

  9. MS SQL生成数据库字典脚本

    开发一个项目时都会有一个蛋疼的问题——写数据库需求文档,然后根据这个文档来建数据库,如果后来需求改了,要改数据库还要改文档,有时忙着忙着就忘改了,导致文档是过期的.那么我们自己写个脚本在数据库运行直接 ...

  10. spring 常用问题汇总

    2018.02.06 SpringMVC中StringHttpMessageConverter乱码处理 http://blog.csdn.net/wangyangbto/article/details ...