我应该如何处理无法通过lines()读取的Perl 6 $*ARGFILES?

2023-11-23

我正在玩lines它从您在命令行上指定的文件中读取行:

for lines() { put $_ }

如果它无法读取它抛出的文件名之一X::AdHoc(有一天也许它会有更好的异常类型,这样我们就可以用.path方法)。好吧,所以抓住这一点:

try {
CATCH { default { put .^name } }
for lines() { put $_ }
}

所以这抓住了X::AdHoc错误但就是这样。这try块在此时完成。它不能.resume并尝试下一个文件:

try {
CATCH { default { put .^name; .resume } }  # Nope
for lines() { put $_ }
}

回到 Perl 5 中,您会收到有关错误文件名的警告,然后程序将继续执行下一操作。

我可以过滤@*ARGS先重建$*ARGFILES如果有一些争论:

$*ARGFILES = IO::CatHandle.new:  
    @*ARGS.grep( { $^a.IO.e and $^a.IO.r } ) if +@*ARGS;

for lines() { put $_ }

虽然它会默默地忽略坏文件,但它仍然有效。我可以处理这个问题,但是自己处理参数列表有点乏味,包括-对于作为文件名的标准输入和不带参数的默认输入:

my $code := { put $_ };

@*ARGS = '-' unless +@*ARGS;
for @*ARGS -> $arg {
    given $arg {
        when '-'     { $code.($_) for $*IN.lines(); next }
        when ! .IO.e { note "$_ does not exist";    next }
        when ! .IO.r { note "$_ is not readable";   next }
        default      { $code.($_) for $arg.IO.lines() }
        }
    }

但这是一项繁重的工作。有没有更简单的方法来处理这个问题?


要警告打开不良并继续,您可以使用如下内容:

$*ARGFILES does role { method next-handle { loop {
    try return self.IO::CatHandle::next-handle;
    warn "WARNING: $!.message"
}}}

.say for lines

Simply 混合角色这使得IO::CatHandle.next-handle方法重试获取下一个句柄。 (您也可以使用but操作员而是混合在副本上)。


如果它无法读取其中一个文件名,则会抛出 X::AdHoc

The X::AdHoc来自.open称呼;有一个有点发霉的公关让这些例外被输入,所以一旦解决了,IO::CatHandle也会抛出类型异常。

无法恢复

是的,您只能从CATCH抓住它的块,但在这种情况下它被困在里面.open调用并被制成Failure,然后由IO::CatHandle.next-handle和它的.exception is re-.thrown.

但是,即使它可以在这里恢复,它也只是恢复到引发异常的路径,而不是使用另一个句柄重新尝试。这没有帮助。 (我研究过使其可恢复,但这增加了模糊性on-switch我不太愿意猜测恢复Exception来自某些地方的必须能够有意义地继续——我们目前不为核心中的任何地方提供这样的保证)。

包括-作为文件名的标准输入

请注意,该特殊含义是用 6.d 语言离开据,直到...为止IO::Handle.open(并且通过扩展IO::CatHandle.new) 去。它可能会得到特殊待遇IO::ArgFiles,但我还没有看到这个提议。


回到 Perl 5 中,您会收到有关错误文件名的警告,然后程序将继续执行下一操作。

在 Perl 6 中,它被实现为通用的IO::CatHandle类型用户可以用于任何东西,而不仅仅是文件参数,因此默认情况下的警告和继续对我来说感觉太宽松了。

IO::ArgFiles可以通过特殊情况来提供这种行为。就我个人而言,我反对到处使用特殊的外壳,我认为这是 Perl 5 中最大的缺陷,但你可以打开一个问题建议看看是否有人支持它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该如何处理无法通过lines()读取的Perl 6 $*ARGFILES? 的相关文章

  • 使用特征应用代理

    我想为一个属性编写一个特征 为它提供一个代理 这样我就可以操纵 sees 背后的值 甚至可以为 direct access在一个班级内 这就是我现在所拥有的 但正如您所看到的 实际的 get set 或 store fetch 方法从未被调
  • Perl 6 语法与我认为的不匹配

    我正在做代码出现第 9 天 http adventofcode com 2017 day 9 您坐了一会儿并记录了流的一部分 您的谜题输入 这些字符代表组 开头的序列 并结束于 在一个组内 有零个或多个其他东西 用逗号分隔 要么是另一个组
  • 有没有更好的方法将文件的完整内容写入 OutputStream?

    当我想将文件的全部内容写入OutputStream 我通常分配一个缓冲区作为byte 然后做一个for循环到read来自文件的数据InputStream写入缓冲区并将缓冲区内容写入OutputStream 直到InputStream没有更多
  • 将 InputStream 转换为固定长度字符串的 Stream

    Like in 将 InputStream 转换为给定字符集的 Stream https stackoverflow com questions 30336257 convert inputstream into streamstring
  • 将二进制文件读入结构体

    我正在尝试使用 C 读取二进制数据 我拥有有关我想要读取的文件中的数据布局的所有信息 我能够 逐块 读取数据 即将前 40 个字节的数据转换为字符串 然后获取接下来的 40 个字节 由于数据至少有三个略有不同的版本 我想将数据直接读入结构中
  • 检查lua中是否存在目录?

    如何检查 lua 中是否存在目录 如果可能的话最好不使用 LuaFileSystem 模块 尝试做类似以下 python 行的事情 os path isdir path 这是一种在 Unix 和 Windows 上都适用的方式 无需任何外部
  • 关闭/清理“混合”文件描述符/套接字

    当我使用accept 创建一个套接字并使用fdopen 从中创建一个文件时 我需要做什么来清理所有内容 我是否需要对 FILE 执行 fclose 对套接字执行 shutdown 和 close 还是只需要 shutdown 和 或 clo
  • 在Python中解析制表符分隔的文件

    我正在尝试在 Python 中解析一个制表符分隔的文件 其中与行开头分开的 k 个制表符的数字应该放入第 k 个数组中 除了逐行读取并执行简单解决方案将执行的所有明显处理之外 是否有内置函数可以执行此操作 或者有更好的方法 您可以使用the
  • 常规文件读取可以从非阻塞 IO 中受益吗?

    对我来说似乎不是 我找到了一个支持我的观点的链接 http www remlab net op nonblock shtml 你怎么认为 您发布的链接内容是正确的 以非阻塞模式打开的常规文件套接字将始终 准备好 读取 当您实际尝试读取它时
  • java中filewriter的flush和close函数之间的区别

    我需要知道Java中的flush和close函数之间的确切区别是什么 当在写入文件期间将数据转储到文件中时 请提供一个例子 flush just确保所有缓冲数据都写入磁盘 在这种情况下 更一般地说 通过您正在使用的任何 IO 通道刷新 之后
  • 如何从命令行提供非 slurpy 数组或命名数组?

    首先 raku perl6 非常棒 克罗也是如此 只花了一个周末就坠入爱河 然而现在我偶然发现了一些非常简单的事情 如果我在多重调度 MAIN 中使用 slurpy 参数 则会被识别并完美运行 multi MAIN config add h
  • 如何通过pthreads管理两个或多个消费者?

    我有一个正在寻求解决的通用问题 即从标准输入或常规文件流发送到应用程序的二进制数据块 应用程序又将二进制数据转换为文本 使用线程 我想在将文本传输到下一个应用程序之前对其进行处理 该应用程序会进一步修改该文本 依此类推 作为一个简单的测试用
  • 在采用 ARM 处理器架构的 Android 上安装 Rakudo

    我正在尝试使用 Termux 在采用 armv7l 处理器架构的 Android 上安装 Rakudo 我尝试从源代码编译 但没有成功 然后有人指出了Termux用户没有用 https github com its pointless 和他
  • java IO将一个文件复制到另一个文件

    我有两个 Java io File 对象 file1 和 file2 我想将 file1 的内容复制到 file2 有没有一种标准方法可以做到这一点 而无需我创建一个读取 file1 并写入 file2 的方法 不 没有内置方法可以做到这一
  • 无法删除临时文件夹(有时)

    当我启动应用程序时 我创建一个临时文件夹 public static File createTempDir String name throws IOException File tempDir File createTempFile na
  • 在 Java 中如何找出哪个对象打开了文件?

    我需要找出答案哪个对象在我的 Java 应用程序中打开了一个文件 这是为了调试 因此欢迎使用工具或实用程序 如果发现哪个对象太具体了 这class也会很有帮助 这可能很棘手 您可以从使用分析器开始 例如VisualVM http visua
  • 解析输入,除了 System.in.read() 之外不使用任何东西

    我很难找到具体的细节System in read 有效 也许有人可以帮助我 似乎扫描仪会更好 但我不允许使用它 我被分配了一个任务 我应该以 Boolean Operator Boolean 的形式读取控制台用户输入 例如T F 或 T T
  • 在 Ruby 控制台应用程序中获取键盘事件(无需按“Enter”输入)的最佳方法是什么?

    我在互联网上寻找这个答案已经有一段时间了 发现其他人也在问同样的事情 即使在这里也是如此 因此 这篇文章将介绍我的案例以及对我找到的 解决方案 的回应 我对 Ruby 很陌生 但出于学习目的 我决定创建一个 gem here https g
  • 为什么我需要一块一块地读取文件来缓冲?

    我看到了以下用于将文件放入数组的代码 该数组又用作将其插入 blob 列的 SQL 命令的参数 using FileStream fs new FileStream soubor FileMode Open FileAccess Read
  • golang中如何将相对路径解析为绝对路径?

    节点中是否有类似 path resolve 的API 或者有什么东西可以做同样的事情 例如 nodejs代码 path resolve sample sh 应该得到 home currentuser sample sh 解决 表示用户主目录

随机推荐

  • WPF:如何禁用选项卡导航而不同时禁用箭头键导航?

    我已经设定IsTabStop在我的窗口中的所有控件上设置为 false 这样当我按 Tab 键时 焦点不会移动 我需要 Tab 键来执行其他操作 但是这样做会破坏箭头键导航 我单击 a 中的一个项目ListView然后按向上 向下不会再更改
  • Git 贡献未显示在 GitHub 上

    我浏览了你的以下文章https help github com articles why are my contributions not showing up on my profile 因为贡献没有显示在我的个人资料上 至少可以说 我正
  • Java List 到 Map 转换

    我想转换一个Map
  • 为 C++ 库制作 Objective-C 包装器

    我正在尝试用 Objective C 制作一个包装器 这样我就不必在库类之外编写 C 了 库的主文件是LLAHProcessor h cpp 我的包装是LLAHProcessorWrapper h mm 它编译得很好 但是当我添加LLAHP
  • html/templates - 用
    替换换行符

    我正在加载一个包含换行符的文本文件 并将其传递给html templates 替换为 n with br 在加载的字符串中 它们被模板转义为 html lt br gt 并显示在浏览器中 而不是导致行返回 我怎样才能改变这种行为而不切换到t
  • Placeholder_2:0 既被馈送又被提取

    当我运行这段代码时 x tf placeholder tf int32 shape None 3 with tf Session as sess feed dict dict feed dict x np array 1 2 3 4 5 6
  • 如何将 GestureDetector 附加到 ListPreference?

    附加一个的挑战手势检测器 to a 列表首选项是 2 倍 获取仅在preferences xml中定义的ListPreference的句柄 即未在Java代码中实例化 ListPreference 既不是 View 也不是 Activity
  • GLFW3 - 对 XRR 的未定义引用

    我正在尝试编译一个非常简单的OpenGL程序使用 GLFW3 尽管链接了我认为必要的所有内容 但我还是收到了大量未定义的引用 usr local lib libglfw3 a x11 gamma c o In function glfwIn
  • 使用虚拟继承的地址未对齐

    以下明显有效的代码使用 UndefinedBehaviorSanitizer 清理程序产生未对齐的地址运行时错误 include
  • TSQL:FOR XML PATH('') 无法分组

    我正在尝试使用特定列对列值进行分组FOR XML PATH 在 TSQL 中 这是两种情况的结果 请注意 没有 XML 代码 即 SELECT FROM xml 与 XML 代码相同 Class Animals Asteroidea Sta
  • 如何获取用户的交互式输入并在输入时能够使用箭头键?

    当我执行 raw input 并输入值时 我无法使用箭头键来更改内容 有什么方法可以做到这一点吗 感谢 readline 模块有助于行编辑功能 如何使用readline模块 只需导入 readline 模块即可 尝试加载 readline
  • 如何在QScrollArea中隐藏滚动条?

    如何隐藏滚动条QScrollArea 目前我使用的是hide 返回的滚动条上的方法QScrollArea horizontalScrollBar and QScrollArea verticalScrollBar 但为滚动条保留的空间仍然存
  • 错误 MSB3147:找不到所需的文件“setup.bin”发布到本地失败

    在网上搜索并讨论这个问题之后在这里聊天 我终于对一个旧错误提出了一个新问题 我在 Windows 10 上使用 Visual Studio Enterprise 2015 有关此问题的问题和答案来自 2011 年MSBuild 错误 MSB
  • Spark 多类分类示例

    你们知道在哪里可以找到 Spark 中多类分类的示例吗 我花了很多时间在书籍和网络上搜索 到目前为止我只知道根据文档的最新版本这是可能的 ML Spark 2 0 推荐使用 我们将使用与下面 MLlib 中相同的数据 有两个基本选项 如果E
  • 将 Java 日期字符串转换为 javascript 日期 [重复]

    这个问题在这里已经有答案了 当我通过 JSON 从 Java 向 Javascript 发送日期时 它会发送如下内容 var ds 11 07 47 13 01 2011 JavaScript 无法将此字符串解析为日期 var d new
  • 如何在 django ORM 的 From 子句中编写子查询

    我想使用 django orm 编写这个查询 SELECT depname empno salary enroll date FROM SELECT depname empno salary enroll date rank OVER PA
  • 如何在tomcat服务器上部署应用程序

    我想将 myapp 部署在 tomcat 服务器中 我知道一种方法是从 webapps 中删除 Root 文件夹并将我的 app war 重命名为 ROOT WAR 但我不想这样做 我想像当用户以 www xxx com 访问我的应用程序时
  • php soap 获取 http 标头时出错

    我正在编写一个通过 SOAP 连接处理大量数据的 PHP 脚本 如果没有遇到任何错误 脚本的总运行时间预计需要几天 我遇到的问题是脚本将运行一段时间 从一小时到一天不等 然后 SOAP 连接将因错误而终止 error fetching ht
  • 如何发现内容被截断?

    我正在尝试构建一个博客应用程序 问题是当我在模板中使用标签 truncatewords html 来截断长度超过指定字数的帖子时 我需要通过一些标题链接到完整的帖子 例如 阅读更多 截断后 所以我应该知道帖子是否被截断 P S 这是解决问题
  • 我应该如何处理无法通过lines()读取的Perl 6 $*ARGFILES?

    我正在玩lines它从您在命令行上指定的文件中读取行 for lines put 如果它无法读取它抛出的文件名之一X AdHoc 有一天也许它会有更好的异常类型 这样我们就可以用 path方法 好吧 所以抓住这一点 try CATCH de