有没有更简洁的方法在Perl中写这个?

Laz*_*zer 4 perl file

这个子例程传递一个文件句柄数组来关闭,它使用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.

  • +1用于使用词法文件句柄并让它们在范围退出时自行关闭. (2认同)

Ari*_*zis 8

sub closef { close $_ for @_ }
Run Code Online (Sandbox Code Playgroud)

但是close函数确实有一个返回值,你通常会检查它.因此,

sub closef { map { close $_ } @_ }
Run Code Online (Sandbox Code Playgroud)


Que*_*tin 7

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)