编辑:参见这个问题 https://stackoverflow.com/questions/28702850/i-can-create-filehandles-to-strings-in-perl-5-how-do-i-do-it-in-perl-6了解如何执行 @raiph 所说的关于打开字符串文件句柄的操作。另外,请阅读@raiph 的评论。
这是打开文件句柄的方法file从字符串,而不是如何打开文件句柄string不涉及文件。感谢@raiph 澄清了 OP 的含义。
该文档有一个名为输入输出 https://docs.perl6.org/language/io描述了这个过程。
读取文件内容的一种方法是通过带有 :r(读取)文件模式选项的 open 函数打开文件并读取内容:
my $fh = open "testfile", :r;
my $contents = $fh.slurp-rest;
$fh.close;
在这里,我们使用 IO::Handle 对象上的 close 方法显式关闭文件句柄。这是读取文件内容的非常传统的方式。然而,同样可以更容易、更清楚地完成,如下所示:
my $contents = "testfile".IO.slurp;
# or in procedural form:
$contents = slurp "testfile"
通过将 IO 角色添加到文件名字符串,我们可以有效地将字符串引用为文件对象本身,从而直接获取其内容。请注意,slurp 会为您负责打开和关闭文件。
这也可以在 Perl5 到 Perl6 页面中找到。 https://docs.perl6.org/language/5to6-nutshell#File-related_operations
在 Perl 5 中,读取文本文件行的常见习惯用法如下:
open my $fh, "<", "file" or die "$!";
my @lines = <$fh>; # lines are NOT chomped
close $fh;`
在 Perl 6 中,这已被简化为
my @lines = "file".IO.lines; # auto-chomped
执行此操作的更多参考可在IO::Handle https://docs.perl6.org/type/IO::Handle文档:
实例IO::Handle
封装一个句柄来操作输入/输出资源。通常不需要直接创建IO::Handle
例如,因为它将由其他角色和方法完成。例如,一个IO::Path
对象提供了一个 open 方法,该方法返回一个IO::Handle
:
my $fh = '/tmp/log.txt'.IO.open;
say $fh.^name; # OUTPUT: IO::Handle