在Windows上使用Perl stat函数

时间:2015-05-12 21:15:56

标签: perl

我正在尝试在Windows上使用Perl。我认为我在语法或访问CPAN信息时遇到问题。我能找到什么信息给出了如何使用这些函数的片段,当我尝试使用这些例子时,我得到了错误。

我不知道怎么去CPAN。我尝试安装它,但在GCCdmake上失败了两次。我不知道这是否有帮助。我使用了http://www.cpan.org/modules/INSTALL.html cpan App::cpanminus

我有一个路径为ex的文件名: c:\users\me\directory\\*.*此文件包含路径+文件名记录列表,我需要文件的时间和大小。当我读取记录时,我可以验证路径+文件名是否正确。

我在批处理文件中有一些帮助。我正在使用%~t1%~z1,如下所示:

将完整路径传递给批处理文件,然后使用

if "%~t1" == "" (
    echo "                      AN ERROR OCURRED  FOR THIS FILE/n"  
) else (   
    echo fpath =%~1 
    echo time = %~t1   
    echo size = %~z1   
)

当我试图把它带到Perl时,我无法让它工作。我已经用尽了一些提示和想法。

我尝试使用类似的IF ( "%~t1" == "" ) {},但我得到(missing operator before t1?)

我尝试使用$str1 = %~t1并获得了"str1" not allowed while "strict subs" in use.

我尝试使用$info->$ctime并获得requires explicit package name.

我尝试my $modtime = (stat($dirHandle))[9] with print "mod time = $mod_time \n";并且没有这样的类mod_time和语法错误。

我尝试使用perl 5.20.1的perl编程文档文件中的以下内容

($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
     $atime,$mtime,$ctime,$blksize,$blocks)
         = stat($filename);

我看不出那是怎么回事,但事实并非如此。我有很多要求显式包名

我从同一个参考文献中尝试了这个

use File::stat;
$sb = stat($filename);
printf "File is %s, size is %s, perm %04o, mtime %s\n",
       $filename, $sb->size, $sb->mode & 07777,
       scalar localtime $sb->mtime;

我不记得所有的错误

每当我看到File :: stat或Path :: Class :: File时,我都不知道如何获取这些内容。

对于得到答案,perl僧侣有点过头了。我迷失在所有的ifs中。

感谢你给我的任何帮助。

1 个答案:

答案 0 :(得分:2)

听起来你在问如何获取文件的大小和最后修改时间。

使用stat

use POSIX qw( strftime );

my $qfn = 'c:\\users\\me\\directory\\file';

my ($size, $mtime) = (stat($qfn))[7, 9]
   or die("Can't stat \"$qfn\": $!\n");

printf("File %s: size=%s modified=%s\n",
   $qfn,
   $size,
   strftime("%Y-%m-%d %H:%M:%S", localtime($mtime)),
);

使用File::stat,将stat替换为具有友好界面的函数:

use File::stat qw( stat );
use POSIX      qw( strftime );

my $qfn = 'c:\\users\\me\\directory\\file';

my $stat = stat($qfn)
   or die("Can't stat \"$qfn\": $!\n");

printf("File %s: size=%s modified=%s\n",
   $qfn,
   $stat->size,
   strftime("%Y-%m-%d %H:%M:%S", localtime($stat->mtime)),
);

提到的两个模块都带有Perl。无需安装它们。