我试着:
#!/usr/bin/env perl
use 5.038;
use warnings FATAL => 'all';
use autodie ':all';
use Devel::Confess 'color';
while (my ($i, $t) = each('a','b','c')) {
say "$i, $t";
}
字符串
但我得到一个错误:
第一个月('a','b','c')
是标量吗?
我真的很喜欢Perl的each
数组,因为我不必声明迭代器变量。
我也试while (my ($i, $t) = each(('a','b','c'))) {
个while (my ($i, $t) = each(qw('a','b','c'))) {
个
但得到同样的错误。while (my ($i, $t) = each(@{ ('a','b','c') }) {
个
但是上面给出了一个错误:Useless use of a constant ("a") in void context
,我从how to solve the “Experimental values on scalar is now forbidden” problem in perl得到的
我如何说服Perl的each
('a','b ','c')是一个数组?
2条答案
按热度按时间rggaifut1#
我怎样才能说服Perl的each that('a','b ','c')是一个数组?
你不能,因为
('a','b','c')
只是一个字符串字面量(标量)的列表,它不是一个数组变量。each的配置文件已清除
每个散列
每个阵列
...
所以它需要一个变量,一个哈希或一个数组。
还有一个问题,
但我得到一个错误:
Experimental each on scalar is now forbidden
个('a','b','c')
是标量吗?首先,我从这样的代码中得到的完整错误消息
字符串
具有指导意义
型
函数
each
被原型化,型
所以它需要一个元素,这个元素需要是一个散列或者数组变量,通过传递一个列表,我们得到了一个在编译时捕获的不匹配,这应该是致命的,所以游戏结束了。
然而,我相信这是一个额外的礼貌,我们也得到了关于“* 在标量上进行实验 *"的消息。
问题是,如果原型中的这种不匹配通过了(不是致命的),列表
'a', 'b', 'c'
将是一个要计算的表达式,它会产生三个标量或一个标量(通过逗号运算符,前两个项被丢弃,表达式返回'c'
,或者,如果优先级是相反的,则返回'a'
,其余的被丢弃),这取决于上下文。在任何一种情况下,标量都将用于
each
,过去允许然后警告然后完全禁止,所以我们(仍然)得到一条额外的消息。j13ufse22#
('a','b','c')
不是一个数组;它是一个列表。参考each。如果你将列表赋给一个数组变量,它将工作:
字符串
输出量:
型