gpt4 book ai didi

perl - print() 在关闭的文件句柄 OUT 上

转载 作者:行者123 更新时间:2023-12-01 12:18:17 24 4
gpt4 key购买 nike

我是 Perl 的新手(刚刚看过一个 Youtube 视频)。我想制作一个脚本,它需要两个 .csv 文件并将它们附加在一起并制作一个新的 .csv 文件。我不想更改正在附加的两个 .csv 文件。我还想让这个脚本将用户输入作为要合并的文件(现在两个附加的 .csv 文件位于同一目录中)。

我不断收到的错误是:print() on closed filehandle OUT at line 1 (#2) (W closed) 您正在打印的文件句柄在之前的某个时间自行关闭。检查你的控制流

但我从未使用过关闭命令,那么我的文件句柄如何关闭?

use strict;
use warnings;
use diagnostics;
use feature 'say';
use feature "switch";
use v5.22;

# Ask for Base File
say "What is the base file you want to use?";
my $base_file = <STDIN>;
chomp $base_file;
open (BASE, '<', $base_file) or die "Couldn't find the base file you are entered: $base_file ";

# Ask for Append File
say "What is the file you want to append to the base file?";
my $append_file = <STDIN>;
chomp $append_file;
open (APPEND, '<', $append_file) or die "Couldn't find the append file you are entered: $append_file ";

# Create new File with new name
say "What is the name of the new file you want to create?";
my $new_file = <STDIN>;
open (OUT, '>>', $new_file);
chomp $new_file;
while(my $base_line = <BASE>) {
chomp $base_line;
print OUT $base_line;
}

最佳答案

您确实应该检查对 open 的调用是否成功。

open(OUT, '>>', $new_file)
or die("Can't append to \"$new_file\": $!\n");

我打赌你会发现 open 失败了,我打赌你会发现这是因为你指定的文件不存在,我打赌你会发现 $new_file 包含一个不应该的换行符。

修复方法是将以下行移动到open 之前:

chomp $new_file;

顺便说一下,你不应该使用全局变量。将 OUT 替换为 my $OUTBASEAPPEND 也是如此。

关于perl - print() 在关闭的文件句柄 OUT 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46516951/

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