che*_*nyf 6 string perl filehandle perl6
在Perl 5中,我可以在字符串上打开文件句柄,如下所示:
open my $kfh, "<", \$message->payload;
Run Code Online (Sandbox Code Playgroud)
我有一个场景,使用字符串作为文件句柄并将其传递给open方法:
my $fh = new IO::Zlib;
open my $kfh, "<", \$message->payload;
if($fh->open($kfh, 'rb')){
print <$fh>;
$fh->close;
}
Run Code Online (Sandbox Code Playgroud)
其中$message->payload从读取卡夫卡,并且内容是一个字节数组.raiph有一个类似的问题,但它没有回答我的问题.
所以我想知道如何在Perl 6中的字符串上打开文件句柄,就像Perl 5一样?这些文档页面没有关于此的信息:
编辑:看到这个问题,了解如何执行 @raiph 所说的有关打开字符串的文件句柄的操作。另外,请阅读@raiph 的评论。
这是如何从字符串打开文件的文件句柄,而不是如何在不涉及文件的情况下打开字符串的文件句柄。感谢@raiph 澄清了 OP 的含义。
该文档有一个名为“输入/输出”的部分描述了此过程。
读取文件内容的一种方法是通过带有 :r(读取)文件模式选项的 open 函数打开文件并读取内容:
Run Code Online (Sandbox Code Playgroud)my $fh = open "testfile", :r; my $contents = $fh.slurp-rest; $fh.close;在这里,我们使用 IO::Handle 对象上的 close 方法显式关闭文件句柄。这是读取文件内容的非常传统的方式。然而,同样可以更容易、更清楚地完成,如下所示:
Run Code Online (Sandbox Code Playgroud)my $contents = "testfile".IO.slurp; # or in procedural form: $contents = slurp "testfile"通过将 IO 角色添加到文件名字符串,我们可以有效地将字符串引用为文件对象本身,从而直接获取其内容。请注意,slurp 会为您负责打开和关闭文件。
在 Perl 5 中,读取文本文件行的常见习惯用法如下:
Run Code Online (Sandbox Code Playgroud)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:
封装一个句柄的实例
IO::Handle来操作输入/输出资源。通常不需要直接创建IO::Handle实例,因为它将由其他角色和方法完成。例如,一个IO::Path对象提供了一个 open 方法,该方法返回一个IO::Handle:Run Code Online (Sandbox Code Playgroud)my $fh = '/tmp/log.txt'.IO.open; say $fh.^name; # OUTPUT: IO::Handle
| 归档时间: |
|
| 查看次数: |
257 次 |
| 最近记录: |