Perl   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了perl6 – 在Perl 6中捕获shell命令的异常大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我不得不运行一个 shell程序退出并出现Perl 6的错误,所以我决定测试它是如何工作的.
做了一个bash脚本产生一个错误,从Perl 6程序运行它:
$cat prog.sh 
echo "error" >&2
exit 1
@H_675_5@以下是我从Perl 6中调用它的方法:

put "start";
  try {
    sHell "./prog.sh";
  }
put "end";
@H_675_5@输出显示程序在运行sHell命令后退出.

start
error
The spawned command './prog.sh' exited unsuccessfully (exit code: 1)
  in block <unit> at b.P6 line 2
@H_675_5@如果我添加一个CATCH块

put "start";
  try {
    sHell "./prog.sh";
    CATCH { default {} }
  }
put "end";
@H_675_5@一切都很好,程序工作到最后一行:

start
error
end
@H_675_5@所以我的问题是:为什么有必要添加CATCH块,而尝试单独无法解决错误?

解决方法

sHell在 sink之前不会抛出异常. @H_675_5@只有sHell的try块完全执行而没有抛出异常,返回块中的最后一个值,然后在try的上下文之外沉没,然后抛出异常.

@H_675_5@你可以看到这个:

put "start";
  try {
    sHell "./prog.sh";
    'something';
  }
put "end";
@H_675_5@现在sHell陷入了try,它被try的隐式CATCH捕获. try块返回块中的最后一个值’something’,然后安全地在try之外沉没.

@H_675_5@您还可以强制接收器在try中发生:

put "start";
try {
   sink sHell "./prog.sh"
}
put "end";
@H_675_5@您添加的CATCH块只是阻止try块从sHell返回返回值.

@H_675_5@你可以重新安排它们,看看它仍然会爆炸:

put "start";
try {
    CATCH { default {} }
    sHell "./prog.sh";
}
put "end";
@H_675_5@处理这个恕我直言的最好,最清晰的方法是自己检查sHell的返回,而不是让它下沉并抛出异常:

put "start";
if sHell "./prog.sh" {
    say 'ok'
}
else {
    say 'failed'
}
put "end";

大佬总结

以上是大佬教程为你收集整理的perl6 – 在Perl 6中捕获shell命令的异常全部内容,希望文章能够帮你解决perl6 – 在Perl 6中捕获shell命令的异常所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。