aboutsummaryrefslogtreecommitdiff
path: root/checkem
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2017-08-04 14:52:51 +1200
committerTom Ryder <tom@sanctum.geek.nz>2017-08-04 14:52:51 +1200
commit971e3f39b0864cc1ce745b1d8c039267b82f02a5 (patch)
treea26c9121fc3f534ef64dca9dcd6a802bad05a7f9 /checkem
parentRemove unneeded cp(1) -p option (diff)
downloadcheckem-971e3f39b0864cc1ce745b1d8c039267b82f02a5.tar.gz (sig)
checkem-971e3f39b0864cc1ce745b1d8c039267b82f02a5.zip
Load up only required stat() fieldsv2.4
Diffstat (limited to 'checkem')
-rwxr-xr-xcheckem16
1 files changed, 9 insertions, 7 deletions
diff --git a/checkem b/checkem
index 43573da..be91194 100755
--- a/checkem
+++ b/checkem
@@ -24,7 +24,7 @@ use Digest::SHA;
use 5.009003;
# Version number to make Perl::Critic happy
-our $VERSION = 2.3;
+our $VERSION = 2.4;
# If no arguments, work with the current working directory
croak('Need at least one dir to search') if !@ARGV;
@@ -51,13 +51,15 @@ find {
no_chdir => 1,
wanted => sub {
my $fn = $File::Find::name;
- my @st = stat $fn or return;
- return if !( $st[ $STATS{mode} ] & S_IFREG );
- return if !$st[ $STATS{size} ];
- return push @{ $sizes{ $st[ $STATS{size} ] } },
+ my %st;
+ @st{ keys %STATS } = ( stat $fn )[ values %STATS ]
+ or return;
+ return if !( $st{mode} & S_IFREG );
+ return if !$st{size};
+ return push @{ $sizes{ $st{size} } },
{
fn => $fn,
- st => \@st,
+ st => \%st,
};
},
}, @ARGV;
@@ -74,7 +76,7 @@ FS: for my $fs ( grep { @{$_} > 1 } values %sizes ) {
F: for my $f ( @{$fs} ) {
# Catch hard links on compliant systems by keeping a dev/inode hash
- my ( $dev, $ino ) = @{ $f->{st} }[ @STATS{qw(dev ino)} ];
+ my ( $dev, $ino ) = @{ $f->{st} }{qw(dev ino)};
if ( $dev && $ino ) {
next F if exists $inos{$dev}{$ino};
$inos{$dev}{$ino} = $f;