将md5哈希添加到Perl sub

时间:2011-11-11 01:41:54

标签: perl md5

如何将文件的md5sum附加到下面的输出列表中。所以最后一个条目是 MD5 =“。$ md5

106         sub generate_file_hash(){
107            my $filename = shift;
108
109            $MASTERCOUNT++;
110
111            my ($devs, $ino, $mode, $nlink, $uid, $gid, $rdev,
112                 $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat($filename);
113
114            open(FILE, $filename) or die "Can't open '$filename': $!";
115            binmode(FILE);
116            $md5 = Digest::MD5->new->addfile(*FILE)->hexdigest();
117
118            return($filename . ",PERMISSIONS=" . $devs  . ",INODE=" . $ino  .
119                           ",MODE=" . $mode  . ",HARD LINKS=" .
120                           $nlink . ",UID=" . $uid  . ",GID=" . $gid  .
121                           ",DEVICE=" . $rdev  . ",SIZE=" .
122                           $size . ",LAST MODIFIED=" .  $mtime  .
123                           ",INODE CREATED=" . $ctime  . ",BLOCK SIZE=" .
124                           $blksize . ",BLOCKS=" . $blocks . ",MD5=" . $md5);
125         }

<击>错误:

全局符号“$ md5”需要在integritychk第116行显式包名。 全局符号“$ md5”需要在integritychk第124行显式包名。

目前的输出是:

/etc/group,PERMISSIONS=51712,INODE=565260,MODE=33188,HARD LINKS=1,UID=0,GID=0,DEVICE=0,SIZE=595,LAST MODIFIED=1273887035,INODE CREATED=1273887035,BLOCK SIZE=4096,BLOCKS=8

因此将附加文件的MD5值。

1 个答案:

答案 0 :(得分:3)

use Digest::MD5;

open(FILE, $filename) or die "Can't open '$filename': $!";
binmode(FILE);
my $md5 = Digest::MD5->new->addfile(*FILE)->hexdigest();

阅读Digest::MD5 manpage以获取有关使用该模块的各种方法的更多信息。