gpt4 book ai didi

bash - 为什么 perl -e "print lc "Hello-World\n""打印 0

转载 作者:行者123 更新时间:2023-11-29 09:16:01 25 4
gpt4 key购买 nike

我有一个代码,我想在命令行中使用 perl 的 -e 选项进行调试。 (确切地说,来自 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?

最佳答案

有一个有用的技巧可以找出 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

这里发生的事情是 perlHello - Worldn “视为”算术和。因为字符串在数值上为零,所以您正在打印 0-0。它与 bash 无关,而是与 perl 及其处理数值的方式有关。

这是因为如果您不使用 strictwarnings,裸词是可以接受的,但会被减法强制转换为数值(例如 0)

如果您打开了警告:

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.

关于bash - 为什么 perl -e "print lc "Hello-World\n""打印 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52817003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com