📄 files.t
字号:
BEGIN { if ($ENV{PERL_CORE}) { chdir 't' if -d 't'; @INC = '../lib'; }}print "1..5\n";use strict;use Digest::MD5 qw(md5 md5_hex md5_base64);# To update the EBCDIC section even on a Latin 1 platform,# run this script with $ENV{EBCDIC_MD5SUM} set to a true value.# (You'll need to have Perl 5.7.3 or later, to have the Encode installed.)# (And remember that under the Perl core distribution you should# also have the $ENV{PERL_CORE} set to a true value.)# Similarly, to update MacOS section, run with $ENV{MAC_MD5SUM} set.my $EXPECT;if (ord "A" == 193) { # EBCDIC $EXPECT = <<EOT;c7b68bb806b2d42f4a11511132e94ae8 Changes11e8028ee426273db6b6db270a8bb38c READMEc5e839f675f682215f913ea73788bc2c MD5.pmd4b61fd6f875dcd3e3066a3d6750010e MD5.xs276da0aa4e9a08b7fe09430c9c5690aa rfc1321.txtEOT} elsif ("\n" eq "\015") { # MacOS $EXPECT = <<EOT;628699b88b6a803225678802d2470067 Changesc95549c6c5e1e1c078b27042f1dc850f READMEe78ad7902025d17f140bef176dc4b154 MD5.pm315f43d139c2ead64060d03b13b39ec5 MD5.xs754b9db19f79dbc4992f7166eb0f37ce rfc1321.txtEOT} else { # This is the output of: 'md5sum Changes README MD5.pm MD5.xs rfc1321.txt' $EXPECT = <<EOT;2fdc25c326960308f5334c967455d1f5 Changesc95549c6c5e1e1c078b27042f1dc850f READMEe78ad7902025d17f140bef176dc4b154 MD5.pmef3c87d60a88b50c60eb75af81cd244a MD5.xs754b9db19f79dbc4992f7166eb0f37ce rfc1321.txtEOT}if (!(-f "README") && -f "../README") { chdir("..") or die "Can't chdir: $!";}my $testno = 0;my $B64 = 1;eval { require MIME::Base64; };if ($@) { print "# $@: Will not test base64 methods\n"; $B64 = 0;}for (split /^/, $EXPECT) { my($md5hex, $file) = split ' '; my $base = $file;# print "# $base\n"; if ($ENV{PERL_CORE}) { if ($file eq 'rfc1321.txt') { # Don't have it in core. print "ok ", ++$testno, " # Skip: PERL_CORE\n"; next; } use File::Spec; my @path = qw(ext Digest MD5); my $path = File::Spec->updir; while (@path) { $path = File::Spec->catdir($path, shift @path); } $file = File::Spec->catfile($path, $file); }# print "# file = $file\n"; unless (-f $file) { warn "No such file: $file\n"; next; } if ($ENV{EBCDIC_MD5SUM}) { require Encode; my $data = cat_file($file); Encode::from_to($data, 'latin1', 'cp1047'); print md5_hex($data), " $base\n"; next; } if ($ENV{MAC_MD5SUM}) { require Encode; my $data = cat_file($file); Encode::from_to($data, 'latin1', 'MacRoman'); print md5_hex($data), " $base\n"; next; } my $md5bin = pack("H*", $md5hex); my $md5b64; if ($B64) { $md5b64 = MIME::Base64::encode($md5bin, ""); chop($md5b64); chop($md5b64); # remove padding } my $failed; my $got; if (digest_file($file, 'digest') ne $md5bin) { print "$file: Bad digest\n"; $failed++; } if (($got = digest_file($file, 'hexdigest')) ne $md5hex) { print "$file: Bad hexdigest: got $got expected $md5hex\n"; $failed++; } if ($B64 && digest_file($file, 'b64digest') ne $md5b64) { print "$file: Bad b64digest\n"; $failed++; } my $data = cat_file($file); if (md5($data) ne $md5bin) { print "$file: md5() failed\n"; $failed++; } if (md5_hex($data) ne $md5hex) { print "$file: md5_hex() failed\n"; $failed++; } if ($B64 && md5_base64($data) ne $md5b64) { print "$file: md5_base64() failed\n"; $failed++; } if (Digest::MD5->new->add($data)->digest ne $md5bin) { print "$file: MD5->new->add(...)->digest failed\n"; $failed++; } if (Digest::MD5->new->add($data)->hexdigest ne $md5hex) { print "$file: MD5->new->add(...)->hexdigest failed\n"; $failed++; } if ($B64 && Digest::MD5->new->add($data)->b64digest ne $md5b64) { print "$file: MD5->new->add(...)->b64digest failed\n"; $failed++; } my @data = split //, $data; if (md5(@data) ne $md5bin) { print "$file: md5(\@data) failed\n"; $failed++; } if (Digest::MD5->new->add(@data)->digest ne $md5bin) { print "$file: MD5->new->add(\@data)->digest failed\n"; $failed++; } my $md5 = Digest::MD5->new; for (@data) { $md5->add($_); } if ($md5->digest ne $md5bin) { print "$file: $md5->add()-loop failed\n"; $failed++; } print "not " if $failed; print "ok ", ++$testno, "\n";}sub digest_file{ my($file, $method) = @_; $method ||= "digest"; #print "$file $method\n"; open(FILE, $file) or die "Can't open $file: $!"; my $digest = Digest::MD5->new->addfile(*FILE)->$method(); close(FILE); $digest;}sub cat_file{ my($file) = @_; local $/; # slurp open(FILE, $file) or die "Can't open $file: $!"; # For PerlIO in case of UTF-8 locales. eval 'binmode(FILE, ":bytes")' if $] >= 5.008; my $tmp = <FILE>; close(FILE); $tmp;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -