Add built local::lib
[catagits/Gitalist.git] / local-lib5 / lib / perl5 / PPI / Util.pm
CommitLineData
3fea05b9 1package PPI::Util;
2
3# Provides some common utility functions that can be imported
4
5use strict;
6use Exporter ();
7use Digest::MD5 ();
8use Params::Util qw{_INSTANCE _SCALAR0 _ARRAY0};
9
10use vars qw{$VERSION @ISA @EXPORT_OK};
11BEGIN {
12 $VERSION = '1.206';
13 @ISA = 'Exporter';
14 @EXPORT_OK = qw{_Document _slurp};
15}
16
17# Alarms are used to catch unexpectedly slow and complex documents
18use constant HAVE_ALARM => ! ( $^O eq 'MSWin32' or $^O eq 'cygwin' );
19
20# 5.8.7 was the first version to resolve the notorious
21# "unicode length caching" bug. See RT #FIXME
22use constant HAVE_UNICODE => !! ( $] >= 5.008007 );
23
24# Common reusable true and false functions
25# This makes it easy to upgrade many places in PPI::XS
26sub TRUE () { 1 }
27sub FALSE () { '' }
28
29
30
31
32
33#####################################################################
34# Functions
35
36# Allows a sub that takes a L<PPI::Document> to handle the full range
37# of different things, including file names, SCALAR source, etc.
38sub _Document {
39 shift if @_ > 1;
40 return undef unless defined $_[0];
41 require PPI::Document;
42 return PPI::Document->new(shift) unless ref $_[0];
43 return PPI::Document->new(shift) if _SCALAR0($_[0]);
44 return PPI::Document->new(shift) if _ARRAY0($_[0]);
45 return shift if _INSTANCE($_[0], 'PPI::Document');
46 return undef;
47}
48
49# Provide a simple _slurp implementation
50sub _slurp {
51 my $file = shift;
52 local $/ = undef;
53 local *FILE;
54 open( FILE, '<', $file ) or return "open($file) failed: $!";
55 my $source = <FILE>;
56 close( FILE ) or return "close($file) failed: $!";
57 return \$source;
58}
59
60# Provides a version of Digest::MD5's md5hex that explicitly
61# works on the unix-newlined version of the content.
62sub md5hex {
63 my $string = shift;
64 $string =~ s/(?:\015{1,2}\012|\015|\012)/\015/gs;
65 Digest::MD5::md5_hex($string);
66}
67
68# As above but slurps and calculates the id for a file by name
69sub md5hex_file {
70 my $file = shift;
71 my $content = _slurp($file);
72 return undef unless ref $content;
73 $$content =~ s/(?:\015{1,2}\012|\015|\012)/\n/gs;
74 md5hex($$content);
75}
76
771;