这个子例程传递一个文件句柄数组来关闭,它使用foreach循环逐个关闭:
sub closef
{
foreach(@_) {
my $fh = shift;
close $fh;
}
}
Run Code Online (Sandbox Code Playgroud)
在哪里可以修改这个简单的子程序以使其更好?
我应该使用close shift而不是两行吗?
Eug*_*ash 12
最简洁的方法是使用词法文件句柄,当它们超出范围时自动关闭:
sub firstline {
open( my $in, shift ) && return scalar <$in>;
# no close() required
}
Run Code Online (Sandbox Code Playgroud)
见perldoc perlopentut.
sub closef { close $_ for @_ }
Run Code Online (Sandbox Code Playgroud)
但是close函数确实有一个返回值,你通常会检查它.因此,
sub closef { map { close $_ } @_ }
Run Code Online (Sandbox Code Playgroud)
foreach(@_) {
close $_;
}
Run Code Online (Sandbox Code Playgroud)
要么
foreach my $fh (@_) {
close $fh;
}
Run Code Online (Sandbox Code Playgroud)
要么
close $_ foreach (@_);
Run Code Online (Sandbox Code Playgroud)