我在生产中发现了一个我不太懂的代码片段.我试图将其缩小到一个简单的例子:
%hash = { 'a' => 'apple','b' => 'banana','c' => 'cherry' }; my $v = "Hello," . '+' foreach (keys %hash); print "Value = \"$v\"\n";
当我运行它时,$v的值是空字符串,这是令人惊讶的.我也很好奇为什么. ”foreach(…)不会导致错误 – 我甚至没有”和foreach(…)之间的运算符,这怎么可能不会导致语法错误?
解决方法
你应该使用警告;
Reference found where even-sized list expected at test.pl line 3.
您将单个值(hashref)分配给%hash而不是键/值对列表.
你也应该使用严格;
Use of uninitialized value $v in concatenation (.) or string at test.pl line 12.
你把我的$v放在for循环中,所以它的作用域是循环的.
use strict; use warnings; my %hash = ( 'a' => 'apple','c' => 'cherry' ); my $v; $v = "Hello," . '+' foreach (keys %hash); print "Value = \"$v\"\n";
…但是每次绕过循环时,你用相同的字符串(“Hello,”.”)覆盖$v.
how can this possibly not cause a Syntax error?
由于你没有使用严格,所以允许很多可怕的事情.在没有严格使用的情况下运行很少有用.
I don’t even have an operator between
'+'
andforeach( ... )
您的代码相当于:
foreach (keys %hash) { my $v = "Hello," . '+'; }
在foreach之前或’之后放置运算符是没有意义的.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。