gpt4 book ai didi

perl - 在 "print"语句的开头加点?

转载 作者:行者123 更新时间:2023-12-01 07:04:14 25 4
gpt4 key购买 nike

我在使用 Perl 脚本时遇到了一些奇怪的事情。这是关于使用一个点给出不同的结果。

perlop 没有发现任何东西,或者我只是吹过了它。我在看 Operator Precedence and Associativity

print "I'd expect to see 11x twice, but I only see it once.\n";
print (1 . 1) . "3";
print "\n";
print "" . (1 . 1) . "3\n";
print "Pluses: I expect to see 14 in both cases, and not 113, because plus works on numbers.\n";
print (1 . 1) + "3";
print "\n";
print "" + (1 . 1) + "3\n";

在开头加上引号是获得我想要的东西的可接受的解决方法,但是这里发生了什么我缺少的操作顺序?有哪些规则需要学习?

最佳答案

当您将第一个参数放入 print 时在括号中,Perl 将其视为函数调用语法。

所以这:

print (1 . 1) . "3";

被解析为:
print(1 . 1)  . "3";

或者,等效地:
(print 1 . 1) . "3";

因此,Perl 打印“11”,然后获取该 print 的返回值。调用(如果成功则为 1),连接 3到它,并且 - 由于整个表达式在 void 上下文中 - 对结果 13 完全没有任何作用.

如果您在启用警告的情况下运行代码(通过命令行上的 -wuse warnings; pragma),您将收到以下警告来标识您的错误:
$ perl -w foo.pl
print (...) interpreted as function at foo.pl line 2.
print (...) interpreted as function at foo.pl line 6.
Useless use of concatenation (.) or string in void context at foo.pl line 2.
Useless use of addition (+) in void context at foo.pl line 6.

正如鲍罗丁在下面的评论中指出的那样,您不应该依赖 -w (或代码中等效的 $^W );生产代码应始终使用 warnings pragma,最好使用 use warnings qw(all); .虽然在这种特殊情况下无关紧要,但您还应该 use strict; ,虽然通过 use 请求现代功能版本 ;对于 5.11 或更高版本的 Perl 版本会自动打开 strict以及。

关于perl - 在 "print"语句的开头加点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37552792/

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