【问题标题】:Add md5 hash to Perl sub将 md5 哈希添加到 Perl sub
【发布时间】:2011-11-11 11:17:17
【问题描述】:

如何将文件的 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 值。

【问题讨论】:

  • 您的程序正在使用strict 运行(这很好。)您需要在使用它们之前使用my 声明变量。所以my $md5 = Digest::MD5->new.... 会修复它。

标签: perl md5


【解决方案1】:
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,了解有关使用该模块的各种方式的更多信息。

【讨论】:

  • 遇到上述错误,我在文件开头包含了 use Digest::MD5;。
猜你喜欢
  • 2020-12-08
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
  • 2020-06-30
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
  • 1970-01-01
相关资源
最近更新 更多