Perl中使用File::Copy时,复制失败如何同时打印错误并执行next?
Perl批量复制场景:一行实现失败打印+循环跳过
当然可以写成一行代码,利用Perl的**短路逻辑运算符or**和do代码块就能实现:
copy($source, $dest) or do { print "-E- Copy failed: $partition fusion SDC wasn't found\n"; next; };
原理说明:
or是短路运算符:只有左边的copy调用返回假(即复制失败)时,才会执行右边的代码- 因为要执行多个语句(打印错误+
next),必须用do { ... }把它们包裹成一个代码块,作为or的右操作数 - 把原代码里的换行替换成
\n,是更规范的Perl字符串换行写法
如果想把错误信息输出到标准错误流(而非标准输出),可以把print换成warn,更符合错误信息的输出规范:
copy($source, $dest) or do { warn "-E- Copy failed: $partition fusion SDC wasn't found\n"; next; };
内容的提问来源于stack exchange,提问作者talos
相关产品推荐
相关产品推荐

