File Coverage

blib/lib/Wasm/Hook.pm
Criterion Covered Total %
statement 46 48 95.8
branch 6 10 60.0
condition n/a
subroutine 11 11 100.0
pod n/a
total 63 69 91.3


line stmt bran cond sub pod time code
1             package Wasm::Hook;
2              
3 1     1   539 use strict;
  1         2  
  1         30  
4 1     1   8 use warnings;
  1         2  
  1         27  
5 1     1   461 use autodie;
  1         14496  
  1         6  
6 1     1   6983 use 5.008004;
  1         7  
7 1     1   935 use Wasm;
  1         5  
  1         5  
8 1     1   6 use Ref::Util qw( is_ref );
  1         2  
  1         50  
9 1     1   6 use Path::Tiny qw( path );
  1         2  
  1         54  
10 1     1   5 use Scalar::Util qw( refaddr );
  1         3  
  1         571  
11              
12             # ABSTRACT: Automatically load WebAssembly modules without a Perl wrapper
13             our $VERSION = '0.23'; # VERSION
14              
15              
16             sub _hook
17             {
18 1     1   1607 my(undef, $file) = @_;
19 1         3 foreach my $inc (@INC)
20             {
21 1 50       4 next if ref $inc;
22 1         7 my $pm = path($inc)->child($file);
23 1 50       91 return () if -f $pm;
24 1         30 my $basename = $pm->basename;
25 1         46 $basename =~ s/\.pm$//;
26 0         0 my($wa) = sort { $b->stat->mtime <=> $a->stat->mtime }
27 2         106 grep { -f $_ }
28 1         3 map { $pm->parent->child($basename . $_) }
  2         117  
29             qw( .wasm .wat );
30 1 50       23 next unless defined $wa;
31 1 50       4 if(-f $wa)
32             {
33 1         34 my $package = $file;
34 1         6 $package =~ s/\.pm$//;
35 1         5 $package =~ s/\//::/g;
36 1         6 my $perl = qq{package $package; use Wasm -api => 0, -exporter => 'ok', -file => "$wa"; 1;\n};
37 1         5 my $fh;
38 1         6 open $fh, '<', \$perl;
39 1         4093 return ($fh);
40             }
41             }
42 0         0 return ();
43             }
44              
45             sub import
46             {
47 1     1   10 __PACKAGE__->unimport;
48 1         35 push @INC, \&_hook;
49             }
50              
51             sub unimport
52             {
53 2 100   2   6 @INC = grep { !is_ref($_) || refaddr($_) != refaddr(\&_hook) } @INC;
  22         71  
54             }
55              
56             1;
57              
58             __END__