Perl追加姓名到文本文件时如何避免清空原有存储内容
Perl追加写入文件问题修复方案
问题原因
你代码中打开写入文件时使用的>是覆盖写入模式,只要执行打开操作就会直接清空文件所有原有内容;且原代码将写入文件的打开操作放在了用户确认注册之前,即使用户拒绝注册也会触发文件清空,这是旧姓名丢失的核心原因。
修改要点
- 将写入文件的打开模式从
>改为追加模式>>,新内容会直接附加到文件末尾,不会改动原有存储的内容 - 关闭第一次读取文件使用的
FILE句柄,避免出现文件占用异常 - 调整逻辑:仅当用户输入yes确认注册时,才执行姓名输入、打开文件、写入操作,避免无意义的空内容写入和误清空
修复后完整代码
my $file = "name.txt"; # 读取并打印文件内所有姓名 unless(open FILE, $file) { die "\n无法打开 $file\n"; } while(my $line = <FILE>) { print $line; } close FILE; print "是否要注册?\n"; $choice = <STDIN>; $confirm = "yes\n"; if ($choice eq $confirm) { print "请输入姓名\n"; $new_name = <STDIN>; # 追加模式打开文件,不会清空原有内容 open (fh, ">>", "name.txt") or die "无法打开文件进行写入: $!"; print fh $new_name; close(fh) or die "关闭文件失败"; }
内容的提问来源于stack exchange,提问作者Kimberly Harris
相关产品推荐
相关产品推荐

