检查文件是否存在以及文件是否不为0

时间:2014-05-07 09:51:37

标签: perl

我注意到我正在修改的一些脚本充满了

if (-e $fullpath_err and -s $fullpath_err > 0) {
 ...

其中$fullpath_errabsolute file path。 我想要适应这种状况。

我想像这样创建一个sub

sub fileIsValid {
  my $filepath = shift;
  return (-e $filepath and -s $filepath > 0);
}

并以这种方式使用它:

if (fileIsValid($fullpath_err)) {
 ...

还有另一种(可能更简单)的方法吗?

3 个答案:

答案 0 :(得分:1)

  

还有另一种(可能更简单)的方法吗?

据我所知,并非如此。你的代码很好,很像Perl。如果您愿意,可以对fileIsValid()进行原型设计,以便它专门采用单个标量参数:

sub fileIsValid ($) {
  my $filepath = shift;
  return (-e $filepath and -s $filepath > 0);
}

尽管原型可能也没必要。

你的代码很好。

答案 1 :(得分:1)

一个小优化。 -e-s调用都会对基础操作系统进行stat调用。这会给代码增加很小的开销。每个stat调用实际上将返回有关该文件的所有数据,因此调用它两次是浪费。但是Perl将来自最近stat的数据缓存到特殊文件句柄_,因此如果您在第二次调用时使用该数据而不是文件名,则会将一个调用保存到{{1 }}

stat

注意:我还删除了不必要且可能存在问题的原型。

答案 2 :(得分:-1)

如果文件不存在,那么它没有大小。所有真正需要的是:

if(-s $ fullpath_err){     ...