gpt4 book ai didi

perl 打开文件错误处理

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

当文件未在下面的 Perl 程序中打开时,我想做一些任务。但是当我运行它时,我收到了语法错误。它出什么问题了?

my $LOGPATH = $ENV{DATA_OU};
my $LOGFILE = "cdj_rep" . "." . "test" . ".rpt";

if ! (open(OUT,">$LOGPATH/test1/work/$LOGFILE")) {
print "testin";
return;
}

close(OUT);

最佳答案

我会把它写成

my $LOGPATH = $ENV{DATA_OU};
my $LOGFILE = "cdj_rep.test.rpt";
my $path = "$LOGPATH/test1/work/$LOGFILE";

open my $fh, ">", $path or do {
warn "$0: open $path: $!";
return;
};

close $fh or warn "$0: close $path: $!";

将整个路径放在 $path 中所以您不必多次重复,如果您需要更改它,您可以在一个地方进行。

调用 open使用词法文件句柄( my $fh )而不是裸字句柄。这是要养成的好习惯,因为路过 $fh subs 或将其填充到数据结构中在语法上往往更自然。

它还使用 open 的 3 参数形式所以你不必担心路径中的字符被特别解释。在您的代码上下文中,这似乎没什么大不了的,但这是另一个值得培养的好习惯。

检查是否是 open 的常用习语成功是
open my $fh, "<", $path
or die "$0: open $path: $!";

使用 if (!open ...unless (open ...没问题,但是使用词法文件句柄,您需要担心范围问题。你似乎在使用支票作为守卫,所以写 open or ...将文件句柄保留在它成功的范围内。如果失败,您希望执行两条语句,因此您需要将它们包装在 do { ... } 中。如上。

还要注意传递给 warn 的错误消息的内容:
  • 出现错误的程序 ( $0 )
  • 它试图做什么 ( open $path )
  • 以及失败的原因 ( $! )
  • warndie运算符(operator)将他们的输出发送到标准错误,这样可以灵活地将错误消息重定向到其他地方。

    最后,当你 close您创建的文件句柄用于写入或追加,您应该检查它是否失败,例如,如果发生 I/O 错误,则可能会发生这种情况。

    关于perl 打开文件错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3233327/

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