foreach 循环会制造一个列表上下文,而楼主的代码的意图可能是把标量$id 当作列表,然后返回的变量转换为列表赋值给@id,但是foreach 把遇到的第一个列表当作条件。
楼主的原意可能是for $id (@id)
我觉得是因为这个错误引发了两个错误,因为foreach 的条件后又跟了一个列表+花括号的组合。
另外感觉楼主对perl 的上下文没有概念。
例如keys 关键字会制造一个列表上下文,楼主却赋值给标量。
而且对优先级概念也不清楚,*=~* 的优先级明显比keys 关键字要高啊,楼主相当于keys (%hash =~ //),把正则用在了散列引用上,楼主的本意是(keys %hash) =~ //,但是这又说回来了,*=~* 会制造一个标量上下文,楼主又在标量上下文中使用列表。。。语法没错,因为这时候列表会转换为标量上下文(例如@n =(a,b,c) 在标量上下文中@n 的结果是3),但是这真的是楼主想要的么?
楼主的原意可能是for $id (@id)
我觉得是因为这个错误引发了两个错误,因为foreach 的条件后又跟了一个列表+花括号的组合。
另外感觉楼主对perl 的上下文没有概念。
例如keys 关键字会制造一个列表上下文,楼主却赋值给标量。
而且对优先级概念也不清楚,*=~* 的优先级明显比keys 关键字要高啊,楼主相当于keys (%hash =~ //),把正则用在了散列引用上,楼主的本意是(keys %hash) =~ //,但是这又说回来了,*=~* 会制造一个标量上下文,楼主又在标量上下文中使用列表。。。语法没错,因为这时候列表会转换为标量上下文(例如@n =(a,b,c) 在标量上下文中@n 的结果是3),但是这真的是楼主想要的么?
