在 IO::CatHandle 中§

有关方法 slurp,请参阅上下文中的主要文档

method slurp(IO::CatHandle:D:)

读取所有可用的源句柄输入并将其作为 Buf(如果句柄处于二进制模式)或 Str(否则)返回。如果源句柄队列已耗尽,则返回 Nil

(my $f1 = 'foo'.IO).spurt: 'foo';
(my $f2 = 'bar'.IO).spurt: 'bar';
 
IO::CatHandle.new(      $f1$f2).slurp.say# OUTPUT: «foobar␤» 
IO::CatHandle.new(:bin$f1$f2).slurp.say# OUTPUT: «Buf[uint8]:0x<66 6f 6f 62 61 72>␤» 
IO::CatHandle.new                .slurp.say# OUTPUT: «Nil␤» 

在 IO::Handle 中§

有关方法 slurp,请参阅上下文中的主要文档

method slurp(IO::Handle:D: :$close:$bin)

返回从当前文件指针到末尾的所有内容。如果调用者处于二进制模式或将 $bin 设置为 True,则将返回 Buf,否则将使用调用者的当前.encoding对内容进行解码并返回 Str

如果将 :$close 设置为 True,则将在完成读取后关闭句柄。

注意:Rakudo 上,此方法在 2017.04 版本中引入;$bin 参数在 2017.10 中添加。

在 IO::Path 中§

有关例程 slurp,请参阅上下文中的主要文档

multi method slurp(IO::Path:D: :$bin:$enc)

读取文件的所有内容,并将其作为 Buf(如果 :$binTrue)或 Str(如果 :$binFalse)返回,并使用 :$enc 编码进行解码,默认为 utf8。之后将关闭文件。有关 :$enc 的有效值,请参阅 &open

在独立例程中§

有关子例程 slurp,请参阅上下文中的主要文档

multi slurp(IO::Handle:D $fh = $*ARGFILES|c)
multi slurp(IO() $path|c)

将整个文件的内容吸入 Str(如果为 :bin,则吸入 Buf)。接受 :bin:enc 可选命名参数,其含义与 open() 相同;可能的编码与所有其他 IO 方法中的编码相同,并在 encoding 例程中列出。如果文件不存在或是一个目录,则该例程将失败。如果没有参数,则子例程 slurp 将对 $*ARGFILES 进行操作,在没有文件名的情况下,$*ARGFILES 默认为 $*IN

# read entire file as (Unicode) Str 
my $text_contents   = slurp "path/to/file";
 
# read entire file as Latin1 Str 
my $text_contents   = slurp "path/to/file"enc => "latin1";
 
# read entire file as Buf 
my $binary_contents = slurp "path/to/file":bin;