阅读文件 foreach 与 while

当读取一个可能很大的文件时,while 循环比 foreach 具有显着的内存优势。以下将按记录读取文件记录(默认情况下,记录表示一行,由 $/指定),在读取时将每个记录分配给 $_

while(<$fh>) {
    print;
}

钻石运算符做一些神奇在这里,以确保仅环终止在结束文件,而不是如在只包含一个 0 字线。

以下循环似乎工作原理相同,但它在列表上下文中计算菱形运算符,导致整个文件一次性读取:

foreach(<$fh>) {
    print;
}

如果你无论如何一次操作一条记录,这可能会导致巨大的内存浪费,因此应该避免。