我知道我可以通过将输入记录分隔符 ( $/
) 设置为未定义的值来读取文件,例如
open my $fh, '<', $filename or die "Cannot read from $file: $!";
my $contents = do { local $/; <$fh> };
但最近我遇到了一个非常相似但不同的成语:
open my $fh, '<', $filename or die "Cannot read from $file: $!";
my $contents = do { local $/ = <$fh> };
(注意local $/ = <$fh>
代替local $/; <$fh>
)。
这两种方法都有效,并且在 CPAN 上提供了带有分配的变体和没有分配的变体的示例(尽管后者并不令人惊讶,更常见)。
但我的问题是它为什么有效?分配的变体是什么?
PS:我也知道我应该使用例如。File::Slurper用于 slurp 文件,但生活有时就是这样有趣。