我正在尝试这个和其他一些东西,但每次都会截断文件:
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; } }
更改此项以打开$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>,:exclusive :a --> :mode<wo>,:append :update --> :mode<rw> :rw --> :mode<rw>,:create :rx --> :mode<rw>,:exclusive :ra --> :mode<rw>,:append
并非所有Rakudo支持的平台(例如Windows,JVM,甚至POSIX本身)都支持模式和标志的所有可能组合,因此只保证上述组合的行为符合预期(或者至少应该表现得那样).
简而言之,简单:一个绝对应该做你想做的事情,它在我的Windows盒子上也是如此.如果它真的在MacOS上截断,我会认为这是一个错误.