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