io - 如何在 Perl 6 中附加到文件?
问题描述
我正在尝试这个和其他一些事情,但它每次都会截断文件:
my $file = 'primes.txt';
sub MAIN ( Int:D $low, Int:D $high where * >= $low ) {
unless my $fh = open $file, :w, :append {
die "Could not open '$file': {$fh.exception}";
}
for $low .. $high {
$fh.put: $_ if .is-prime;
}
}
将其更改为open $file, :a
似乎也会截断文件。这是 macOS 上的 2018.04。
解决方案
Perl6&open
语义基于POSIX,具有以下映射:
:mode<ro> --> O_RDONLY
:mode<wo> --> O_WRONLY
:mode<rw> --> O_RDWR
:create --> O_CREAT
:append --> O_APPEND
:truncate --> O_TRUNC
:exclusive --> O_EXCL
为方便起见,提供了以下快捷方式:
:r --> :mode<ro>
:w --> :mode<wo>, :create, :truncate
:x --> :mode<wo>, :create, :exclusive
:a --> :mode<wo>, :create, :append
:update --> :mode<rw>
:rw --> :mode<rw>, :create
:rx --> :mode<rw>, :create, :exclusive
:ra --> :mode<rw>, :create, :append
并非 Rakudo 支持的所有平台(例如 Windows、JVM,甚至不包括 POSIX 本身)都支持所有可能的模式和标志组合,因此只有上述组合才能保证按预期运行(或至少应该按预期运行)。
长话短说,一个简单的:a
绝对应该做你想做的事,它在我的 Windows 盒子上也是如此。如果它真的在 MacOS 上截断,我会认为这是一个错误。
推荐阅读
- oracle - 如何在只有主键的表上创建表单/报告?
- git - 捕捉 git push --upstream 输出
- php - 如何在不清除缓存的情况下重新加载用户自定义字段
- css - 对同一个 React 应用使用两个 style.css
- php - Angular 服务调用丢失发布变量
- c++ - 转换为指向私有类函数的指针
- c++ - 如何将 cdparanoia 读取的 CD 音频数据交给 ALSA 播放器?
- r - 如何将列表中的所有数据框合并到单个数据框?
- windows - AutoHotKey Hotstring 不会在 Windows 上的 gvim 或 WSL Ubuntu 中的 vim 中触发
- powershell - 复制项 cmdlet 仅在目标文件夹存在时才能正常工作