File Coverage

lib/Perlmazing/Perlmazing/stat.pm
Criterion Covered Total %
statement 25 32 78.1
branch 3 8 37.5
condition n/a
subroutine 7 9 77.7
pod 0 1 0.0
total 35 50 70.0


line stmt bran cond sub pod time code
1 1     1   8 use Perlmazing;
  1         2  
  1         11  
2              
3             sub main {
4 1 50   1 0 3 if (wantarray) {
5 0         0 return CORE::stat $_[0];
6             } else {
7 1         4 return Perlmazing::Object::Stat->new($_[0]);
8             }
9             }
10              
11             package Perlmazing::Object::Stat;
12 1     1   7 use Perlmazing;
  1         1  
  1         4  
13 1     1   7 use overload fallback => 1, '""' => \&_stringify;
  1         2  
  1         7  
14             our $AUTOLOAD;
15              
16             # These are just respecting the name given in the Perldoc for convienience:
17             my @keys = qw(
18             dev
19             ino
20             mode
21             nlink
22             uid
23             gid
24             rdev
25             size
26             atime
27             mtime
28             ctime
29             blksize
30             blocks
31             );
32              
33             sub new {
34 1     1   2 my $self = shift;
35 1         3 my $file = shift;
36 1         20 my @stat = CORE::stat $file;
37 1 50       4 return unless @stat;
38 1         3 my $this = {};
39 1         3 for (my $i = 0; $i < @stat; $i++) {
40 13         32 $this->{$keys[$i]} = $stat[$i];
41             }
42 1         5 bless $this, $self;
43             }
44              
45             sub _stringify {
46 1     1   1141 my $self = shift;
47 1         2 my $string = '';
48 1         2 for my $i (@keys) {
49 1 50       8 return 1 if defined $self->{$i};
50             }
51             }
52              
53             sub _keys {
54 1     1   28 my @copy = @keys;
55 1         5 return @copy;
56             }
57              
58             sub AUTOLOAD {
59 0     0     (my $name = $AUTOLOAD) =~ s/^.+:://;
60 0           my $self = shift;
61 0 0         if (exists $self->{$name}) {
62 0           return $self->{$name};
63             } else {
64 0           my @call = caller;
65 0           die qq[Can't locate object method "$name" via package "].__PACKAGE__.qq[" at $call[1] line $call[2].\nTip: valid methods are ].join(', ', @keys)."\n";
66             }
67             }
68              
69       0     sub DESTROY {}
70              
71             1;