如何在 Perl 6 中打开字符串上的文件句柄?

2024-01-04

在 Perl 5 中,我可以像这样打开字符串上的文件句柄:

open my $kfh, "<", \$message->payload;

我有一个使用字符串作为文件句柄并将其传递给open method:

my $fh = new IO::Zlib;
open my $kfh, "<", \$message->payload;
if($fh->open($kfh, 'rb')){
   print <$fh>;
   $fh->close;
}

where $message->payload读取自Kafka https://kafka.apache.org/,内容是一个字节数组。raiph https://stackoverflow.com/users/1077672/raiph had a 类似的问题 https://stackoverflow.com/questions/28702850/i-can-create-filehandles-to-strings-in-perl-5-how-do-i-do-it-in-perl-6,但它没有回答我的问题。

所以我想知道如何像 Perl 5 一样在 Perl 6 中打开字符串上的文件句柄?这些文档页面没有这方面的信息:

  • open https://docs.perl6.org/language/5to6-perlfunc#open
  • 文件句柄 https://docs.perl6.org/language/101-basics#index-entry-filehandle
  • IO::句柄 https://docs.perl6.org/type/IO::Handle

编辑:参见这个问题 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 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Perl 6 中打开字符串上的文件句柄? 的相关文章

  • 如何计算特定字符在字符串中出现的次数

    我正在尝试创建一个函数来查看数组中的任何字符是否在字符串中 如果是 有多少个 我尝试计算每一种模式 但是太多了 我尝试使用 Python 中的 in 运算符的替代方案 但效果不佳 function calc fit element var
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 如何修复:“无法解析类型 java.lang.CharSequence。它是从所需的 .class 文件间接引用的”消息? [复制]

    这个问题在这里已经有答案了 我正在尝试使用这个字符串 amountStr amountStr replace replace replace 但我收到一条错误消息 我知道我收到的错误消息是因为我刚刚发布的字符串已过时 所以我想知道该字符串的
  • 如何消除字符串中的所有换行符?

    我需要删除字符串中出现的所有换行符 来自数据库 我使用下面的代码来做到这一点 value Replace r n Replace n Replace r 我可以看到至少有一个角色的行为就像行尾一样幸存了下来 字符代码是8232 http w
  • 确定 C 字符串是否是 C 中的有效 int

    我需要检查 C 字符串是否是有效整数 我都尝试过 int num atoi str and int res sscanf str d num 但发送字符串 8 9 10 这两行都仅返回 8 而没有指示该字符串的无效性 谁能提出替代方案 看看
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • perl-5.10 之前的高效版本相当于 pack("Q>")

    更新 萨尔瓦正确地指出我对 Q 包模板的介绍是错误的 这是 gt 修饰符 不会返回到 5 8 Perl 5 10 引入了 pack 修饰符 gt 对于我使用 Q 的用例 它将一个无符号四边形 64 位 值打包在大尾数法 现在 我正在寻找一个
  • Swift 仅删除字符串中的尾随空格

    SO 中的许多示例都固定两侧 即前导和尾随 我的要求只是关于尾随 我的输入文本是 保持我的左侧 期望的输出 保持我的左侧 当然 这个命令会删除两端 let cleansed messageText trimmingCharacters in
  • 将字符串拆分为数组,在 Swift 中保留定界符/分隔符

    寻找一种 优雅的 解决方案来分割字符串并将分隔符保留为数组中的项目 示例1 hello world hello world 示例2 hello world hello world thx 假设您要使用名为的分隔符分割字符串separator
  • 字符串替换多个值

    我有一个看起来像这样的字符串 布拉布拉 亚达亚达 布拉布拉 亚达亚达 有没有办法只替换前两个 或最后两个 以便我可以获得下一个输出 Bla bla a href link1 yada yada a bla bla yada yada 如有必
  • Java:字符串连接和变量替换的最佳实践[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在 Java 中连接字符串和添加变量值的方法有太多 我应该如何选择一个 优点 缺点 最佳用例等 MessageFormat forma
  • 从文件 C 中的单行读取多个变量类型

    好吧 我一整天都在做这个 但我一辈子都无法把它记下来 也许你们可以帮忙 我有一个文件 内容如下 1301 105515018 水手长 迈克尔 R ABC 123 R01 1301 103993269 卡斯蒂利亚 小迈克尔 ABC 123 R
  • Raku mixin 如何与运算符重载配合使用?

    我可以使用一些帮助来确定是否可以通过重载数学运算符来与 mixin 一起使用does or but 以避免下面的歧义错误 该模块 unit module Physics Error role Error is export has Real
  • HTTP POST 操作出现错误代码 302

    我有一个 perl 脚本 它将数据发送到我用 php 编写的 Web 服务 这是代码 use LWP UserAgent my ua LWP UserAgent gt new my server endpoint http example
  • 如何在 Swift 中将文件名与文件扩展名分开?

    给定包中文件的名称 我想将该文件加载到我的 Swift 应用程序中 所以我需要使用这个方法 let soundURL NSBundle mainBundle URLForResource fname withExtension ext 无论
  • 如何分割字符串并在ant脚本的for循环中使用它?

    我在 ant 属性中有一个机器 IP 列表
  • 如何实现 Vec 的修剪?

    Rust 提供了字符串的修剪方法 str trim http doc rust lang org stable std primitive str html method trim删除前导和尾随空格 我想要一个对字节串执行相同操作的方法 应
  • Java中有没有一种方法可以通过名称实例化一个类?

    我正在寻找问题 从字符串名称实例化一个类 https stackoverflow com questions 9854900 instantiate an class from its string name它描述了如何在有名称的情况下实例
  • 如何检查字符串是否为有效日期

    我有一个字符串 31 02 2010 并想检查它是否是有效日期 最好的方法是什么 我需要一个方法 如果字符串是有效日期 则返回 true 如果不是 则返回 false require date begin Date parse 31 02
  • 检查 JavaScript 字符串是否为 URL

    JavaScript 有没有办法检查字符串是否是 URL 正则表达式被排除在外 因为 URL 很可能是这样写的stackoverflow 也就是说它可能没有 com www or http 如果你想检查一个字符串是否是有效的 HTTP UR

随机推荐

  • Java:使用 Collat​​orKey 对集合进行排序

    我想要实现的是按字符串值对对象集合进行排序 但是 以依赖于语言环境的方式使用整理器 由于性能原因 我不想使用 Collat orcompare 方法 如下代码所示 而是使用 Collat ionKey 类 因为 java API 声明使用
  • 子视图显示在父 UIView 的边界之外

    我有一个包含另一个子视图的 UIView 子视图的框架位于超级视图的边界之外 但是当我运行应用程序时 整个子视图是可见的 例子 Super view Subview
  • Android O 中的通知徽章

    我正在使用 Android Oreo SDK 使用 Google Nexus 5x 进行测试 我无法在主屏幕的应用程序图标中找到通知徽章 即使我收到来自应用程序的通知 并且应用程序快捷方式未显示数字 以下是代码片段 final Notifi
  • 根据路径方向更改 Google 地图标记方向

    我想知道是否可以根据地图上绘制的路径更改标记方向 这是一个例子 正如您所看到的 标记是一辆汽车 带有前保险杠和尾灯 我想将汽车定向到路径行驶的方向 在本例中将汽车定向为向右约 45 度 我在用着DirectionsService绘制路径 我
  • 如果是index.php,则显示“this”,如果不是,则显示“this”

    迫切希望有人可以提供帮助 我是php新手 我尝试通过教程自学 但我到处搜索都无济于事 基本上我正在寻找实现一个 如果index php页面 显示foo 如果不在index php页面上 则显示bar 有任何想法吗 我希望我能很好地解释这一点
  • 错误:Apache 意外关闭错误消息

    我刚刚使用此指南将 XAMPP 的 PHP 版本从 PHP 7 1 7 升级到 PHP 7 2 0article https www techflirt com how to upgrade php in xampp 然后我尝试重新启动 X
  • 控制器可以进行数据库查询(MySQL)吗?如果是,什么时候?

    我正在阅读大量有关 MVC 的教程 所以我的问题是 一个完美的 PHP MVC 框架可以在控制器中进行数据库查询吗 据我了解 最舒服的方法是将所有数据库查询放在模型中 对吧 如果我有 POST 或 smth 我只需将该 POST 传递给 M
  • npm 开始在 node.js 中给出错误

    我对 Node js 和 mongodb 完全陌生 我正在使用以下链接 http cwbuecheler com web tutorials 2013 node express mongo http cwbuecheler com web
  • Cython:内存视图的大小属性

    我在 Cython 中使用了很多 3D 内存视图 例如 cython declare a double 1 a np empty 10 20 30 dtype double 我经常想循环遍历所有元素a 我可以使用像这样的三重循环来做到这一点
  • Javascript IE 错误:“目标”为 null 或不是对象

    document onkeydown function event var tagName event target tagName if tagName INPUT tagName TEXTAREA event alt event con
  • 带有改造的自动完成文本视图

    我正在使用一个实现AutoCompleteTextView其中建议是从 webapi 获取并根据用户输入显示的 我正在使用改造客户端进行网络连接 我有两个疑问 1 我不希望为每个键入的字符发送请求 仅当用户按住 5 秒时才发送请求 我怎样才
  • 后台并发复制GC释放 - Flutter

    在我的 Flutter 日志中 我不断收到以下消息 只是有一些不同的数字 Background concurrent copying GC freed 153040 3MB AllocSpace objects 12 4MB LOS obj
  • 从缓存加载网页视图

    我需要当可以访问互联网时从互联网加载 mWebview 当它不可用时 它需要从缓存加载它 我有一些东西 但它根本不加载网站 请帮我 权限 ive 已添加 android permission INTERNET android permiss
  • 为 url 编码西里尔字母的最快方法

    如果您将以下链接复制到浏览器中 http be wikipedia org wiki 它将显示 Wiki 文章 但是 一旦您想要将该链接 或任何其他包含西里尔字母符号的链接 从浏览器 URL 复制到记事本中 您将得到如下内容 http be
  • 詹金斯管道:无法将构建参数传递给共享库变量

    基本上我无法将构建属性传递给 Library var 调用而不需要额外的废话 jenkinsfile 相关块 tc test repo test1 folder test2 submodules true refs params GitCh
  • Ruby before_validation 触发无限循环回调

    产品模型有一个属性 1 如果 attribute 1 需要重新计算 则 before validation 将调用 它给予SystemStackError stack level too deep因为self save 触发before v
  • 如何在两个 MapReduce 作业之间传递变量

    我已经链接了两个 Map reduce 作业 Job1 将只有一个减速器 我正在计算一个浮点值 我想在 Job2 的减速器中使用这个值 这是我的主要方法设置 public static String GlobalVriable public
  • 多个文件的预签名 URL?

    我已经编写了一个实现 用于为 aws s3 上的存储桶生成预签名 URL 它工作得很好 可以获取单个文件 对象 我该如何为整个目录生成预签名 URL 这么说吧 在我的 s3 存储桶上 有多个文件夹 它们都有自己的小型 html5 应用程序
  • 命名空间“System”中不存在类型或命名空间名称“Transactions”[重复]

    这个问题在这里已经有答案了 这是使用 Visual Studio 2013 的 ASP Net Web 应用程序 该解决方案由多个项目组成 我在一个图书馆项目中有代码using System Transactions 几个月来效果很好 今天
  • 如何在 Perl 6 中打开字符串上的文件句柄?

    在 Perl 5 中 我可以像这样打开字符串上的文件句柄 open my kfh lt message gt payload 我有一个使用字符串作为文件句柄并将其传递给open method my fh new IO Zlib open m