首页 > 解决方案 > Perl 带字符串参数的 foreach

问题描述

Perldocs 仅表明foreach循环“迭代普通列表值” https://perldoc.perl.org/perlsyn.html#Foreach-Loops,但我有时会看到它们带有字符串参数,例如以下示例:

foreach (`curl example.com 2>/dev/null`) {
    # iterates 50 times
}

foreach ("foo\nbar\nbaz") {
    # iterates just 1 time. Why?
}

传递这样的字符串的行为是否已定义?另外,为什么像示例中那样传递反引号命令返回的字符串和文字字符串会产生不同的结果?

标签: perl

解决方案


在标量上下文中,反引号返回一个包含封闭命令的所有输出的单个标量。但是foreach (...)在列表上下文中评估反引号,这会将输出分成一个列表,每个元素一行。


推荐阅读