perl – 为什么返回空字符串?

我在生产中发现了一个我不太懂的代码片段.我试图将其缩小到一个简单的例子:

%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 '+' and foreach( ... )

您的代码相当于:

foreach (keys %hash) {
    my $v = "Hello," . '+';
}

在foreach之前或’之后放置运算符是没有意义的.

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...