我正在玩行
,它从您在命令行上指定的文件中读取行:
for lines() { put $_ }
如果它不能读取其中一个文件名,它会抛出X::Adhoc
(也许有一天它会有更好的异常类型,这样我们就可以用. path
方法获取文件名)。好吧,抓住那个:
try {
CATCH { default { put .^name } }
for lines() { put $_ }
}
所以这捕获了X::Ad的
错误,但仅此而已。尝试块在这一点上完成。它不能。恢复
并尝试下一个文件:
try {
CATCH { default { put .^name; .resume } } # Nope
for lines() { put $_ }
}
回到Perl5Land,您会收到一条关于错误文件名的警告,程序将继续进行下一步。
如果存在一些参数,我可以先过滤@*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
简单地混合在一个角色中,使IO::CatHandle.next方法重新尝试获取下一个句柄。(您也可以使用但
运算符在副本上混合)。
如果它不能读取其中一个文件名,它会抛出X::Ad
X::AdHoc
来自。打开
call;要将这些异常类型化,有一个有点发霉的PR,所以一旦修复了它,IO::CatHandle
也会抛出类型化异常。
它不能.恢复
是的,您只能从捕获它的CATCH
块恢复,但在本例中,它是在中捕获的。打开
调用,并进入一个故障,然后由IO::CatHandle接收。下一个句柄及其
。异常
是重新定义的。抛出。
然而,即使它在这里是可恢复的,它也只是恢复到引发异常的路径中,而不是使用另一个句柄重试。这没用。(我考虑过使其可恢复,但这给开关上的
增加了模糊性,我不愿意指定从某些位置恢复
异常必须能够有意义地继续,我们目前不为核心中的任何位置提供这样的保证)。
包括
-
作为标准输入文件名
请注意,这种特殊意义在第6章中消失了。d语言,只要
)即可。它可能会在IO::Handle。打开
(扩展为IO::CatHandle.newIO::ArgFiles
中得到特殊处理,但我还没有看到这样的建议。
回到Perl5Land,您会收到一条关于错误文件名的警告,程序将继续进行下一步。
在Perl 6中,它被实现为一种通用的
IO::CatHandle
类型,用户可以用它来做任何事情,而不仅仅是文件参数,因此,在默认情况下,警告和继续前进对我来说太过宽松了。
IO::ArgFiles
可以是提供这种行为的特殊情况。就个人而言,我反对到处都是特殊外壳的东西,我认为这是Perl 5中最大的缺陷,但是你可以提出一个问题,看看是否有人支持它。
我想做的是从我用Arudino制作的转速表电路中读取连续的数据流,然后将其输入处理;我已经使用下面的代码成功完成了: 我不确定如何处理数据,以便每当检测到某个值时,处理中都会发生事件。 编辑:有人建议关闭,所以我的问题是调用是一个阻塞调用,这意味着中的指令指针将保持在。指针将调用和,但永远不会到达启动串行端口的线路 建议的解决方案是将这些行移动到的顶部,并将作为的最后一行。我尝试了这个(我下面的代
我有一个部署过程,在这个过程中,我将代码签入git存储库,并通过web钩子在生产服务器上运行部署脚本。在该服务器上,我使用ssh和.pem键连接到git,从git拉出,npm安装,构建webpack并重新启动服务进程。 我从来不打算从prod服务器提交任何东西--它们应该能够自动部署。但是,这不起作用,因为文件在运行时经常更新,因此下次部署时,步骤失败,表示我与现有的文件冲突,因为它有未提交的更改
我有一个Play 2.0.1应用程序,正在通过spring data binder掌握表单处理的窍门,如文档中所述。我有一个表单,假设一个用户给另一个用户发送消息,看起来像这样: 我的自定义绑定器确保用户(由他的id以超文本标记语言-form表示)得到正确的序列化,并且当不存在这样的用户时默认为空。 我正在考虑编写额外的验证,即确保通过表单传递的用户是试图发布消息的用户的朋友。这基本上是一种-注释
我试图在Perl6中逐行读取一个巨大的gz文件。 我正在尝试做这样的事情 但是这会给出一个错误,我有一个格式不正确的UTF-8。我看不到如何从帮助页面读取gzip材料https://docs.perl6.org/language/unicode#UTF8-C8或https://docs.perl6.org/language/io 我想完成和在Perl5中一样的事情:http://blog-en .
问题内容: 我正在学习MySQL并尝试使用子句。当我如下使用它时: 我收到以下错误: MySQL服务器正在使用–secure-file-priv选项运行,因此它无法执行此语句 我该如何解决这个错误? 我已经检查了关于同一错误消息的另一个问题,但仍然找不到解决方案。 我正在使用MySQL 5.6 问题答案: 它按预期工作。您的MySQL服务器已使用--secure-file- priv 选项启动,该
我总是从命令行运行程序,允许你混合参数的顺序。如果你在其中加入额外的东西,他们就会抓住你。例如: 他们是怎么做到的?有这方面的模块吗?