gpt4 book ai didi

perl - 仅当文件尚未打开时,如何才能在 Perl 中打开它?

转载 作者:行者123 更新时间:2023-12-04 17:13:13 26 4
gpt4 key购买 nike

如果我有一个打开文件的子程序,确保它仅在第一次调用子程序时打开它的最佳方法是什么?我有这个,但不确定它的最佳实践:

{
my $count = 0;
sub log_msg {
my ($msg,$name) = @_;

if ($count == 0) {
my $log_file_name = "/tmp/" . $name;
open my $log_fh,">",$log_file_name or croak "couldn't open $log_file_name : $!";
print $log_fh "$timestamp: created and opened $log_file_name\n";
}
$count++;
}
}

最佳答案

听起来是使用状态变量的好理由。将文件句柄存储在持久哈希中。

#!/usr/bin/perl

use 5.010;
use strict;
use warnings;

sub log_msg {
state %fh;
my ($msg, $name) = @_;

unless ($fh{$name}) {
warn "Opening $name\n";
open $fh{$name}, '>', $name or die $!;
print {$fh{$name}} scalar localtime, " Opened file\n";
}

print {$fh{$name}} $msg, "\n";
}

log_msg('Message1', 'first.log');
log_msg('Message2', 'first.log');
log_msg('MessageA', 'second.log');
log_msg('MessageB', 'second.log');

请注意打印调用中文件句柄周围的额外大括号。那是因为 print 对可以用作其文件句柄参数的内容有点挑剔。

关于perl - 仅当文件尚未打开时,如何才能在 Perl 中打开它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3945362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com