热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

为什么perl-e"printlc"Hello-World\n""打印0

如何解决《为什么perl-e"printlc"Hello-World\n""打印0》经验,为你挑选了1个好方法。

我有一个代码,我想-e从命令行使用perl的选项进行调试.(确切地说,来自Mac OS终端)

当我调用这样的子程序时,我忘了正确匹配双引号,有点像:

perl -e "print lc "Hello-World\n""
#Output: 0

我很惊讶地看到,0但仔细观察后,我发现我的双引号有问题.不出所料,使用外部单引号标记可以解决问题

perl -e 'print lc "Hello-World\n"'
# Output(fixed): hello-world

现在我看到了问题所在,我很好奇地看到它0首先归还了.看起来bash执行了某种减法操作,因为如果我在那里没有破折号重复同样的错误,即使错误的双引号我也没有这个问题:

perl -e "print lc "HelloWorld\n""
                  ^ closing the quotes too soon
#Output: helloworldn

那么为什么这个语法perl -e "print lc "Hello-World\n""打印0?



1> Sobrique..:

有一个有用的技巧可以找出perl的'思考'.

perl -MO=Deparse -e "print lc "Hello-World\n""

perl -MO=Deparse -e "print lc "Hello-World\n""
print lc 'Hello' - 'Worldn';
-e syntax OK

这里发生的perl是"看到" Hello - Worldn作为算术总和.因为字符串在数字上为零,所以你要打印0-0.它bashperl处理数值无关,而是与它有关.

这是因为如果您不使用strictwarnings,则可接受裸字,但是通过减法强制转换为数值(例如0)

如果你打开了warnings:

perl -Mwarnings -e "print lc "Hello-World\n""
Argument "Worldn" isn't numeric in subtraction (-) at -e line 1.
Argument "Hello" isn't numeric in subtraction (-) at -e line 1.


推荐阅读
author-avatar
antingwolf
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有