File Coverage

blib/lib/Object/Util/Stringify.pm
Criterion Covered Total %
statement 29 29 100.0
branch 6 8 75.0
condition n/a
subroutine 8 8 100.0
pod 2 2 100.0
total 45 47 95.7


line stmt bran cond sub pod time code
1             package Object::Util::Stringify;
2              
3 1     1   73470 use 5.018000;
  1         18  
4 1     1   6 use strict;
  1         2  
  1         25  
5 1     1   5 use warnings;
  1         2  
  1         50  
6              
7 1     1   6 use Scalar::Util qw(blessed refaddr);
  1         2  
  1         59  
8              
9 1     1   6 use Exporter qw(import);
  1         2  
  1         362  
10              
11             our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
12             our $DATE = '2021-11-23'; # DATE
13             our $DIST = 'Object-Util-Stringify'; # DIST
14             our $VERSION = '0.003'; # VERSION
15              
16             our @EXPORT_OK = qw(
17             set_stringify
18             unset_stringify
19             );
20              
21             my %Overloaded_Packages;
22             my %Object_Strings; # key=refaddr, val=string
23             sub set_stringify {
24 3     3 1 1476 require overload;
25              
26 3         8 my ($obj, $str) = @_;
27              
28 3 50       17 die "First argument must be a blessed reference" unless blessed($obj);
29              
30 3         7 my $obj_pkg = ref $obj;
31 3         11 $Object_Strings{ refaddr($obj) } = $str;
32             $obj_pkg->overload::OVERLOAD(q("") => \&_overload_string)
33 3 100       23 unless $Overloaded_Packages{$obj_pkg}++;
34              
35             # return the obj for convenience
36 3         59 $obj;
37             }
38              
39             sub unset_stringify {
40 2     2 1 19 my ($obj, $str) = @_;
41              
42 2 50       16 die "First argument must be a blessed reference" unless blessed($obj);
43              
44 2         6 my $obj_pkg = ref $obj;
45 2         7 delete $Object_Strings{ refaddr($obj) };
46              
47             # return the obj for convenience
48 2         5 $obj;
49             }
50              
51             sub _overload_string {
52 5     5   37 my $obj = shift;
53 5         17 my $key = refaddr $obj;
54 5 100       31 exists($Object_Strings{$key}) ? $Object_Strings{$key} : $obj;
55             }
56              
57             1;
58             # ABSTRACT: Utility routines related to object stringification
59              
60             __END__