首页 新闻 会员 周边 捐助

foreach 循环要求将待遍历的列表放在圆括号 ()

0
[已关闭问题] 关闭于 2025-07-23 16:18

报错的原因是 语法写错了——Perl 的 foreach 语法需要把列表放在圆括号里,并且用尖括号读取句柄时要写完整:
perl
复制

!/usr/bin/perl

foreach $line (<STDIN>) { # ← 圆括号 + <STDIN>
print $line;
}
为什么要放在()里面

_java_python的主页 _java_python | 小虾三级 | 园豆:1070
提问于:2025-07-23 16:16
< >
分享
所有回答(1)
0

对比 while 循环的标量上下文行为:

perl
while (my $line = <STDIN>) { ... } # 标量上下文:逐行读取
while 条件句是标量上下文:每次读取一行

foreach + 圆括号是列表上下文:一次性读取所有行

考虑以下错误写法:

perl
foreach $line <STDIN> { ... } # 语法错误!
Perl 解析器会困惑:

<STDIN> 是否表示文件句柄?

是否遗漏了比较运算符(如 foreach $line < 10)?
圆括号消除了这种歧义。

!/usr/bin/perl

一次性读取所有行(适合小文件)

foreach my $line (<STDIN>) {
print $line;
}

更高效的逐行读取(推荐大文件)

while (my $line = <STDIN>) {
print $line;
}
关键点:

使用 foreach 时必须加 () 包裹列表

<STDIN> 在列表中会一次性吞掉所有输入(慎用大文件)

处理大文件优先用 while 循环

_java_python | 园豆:1070 (小虾三级) | 2025-07-23 16:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册