/usr/share/perl5/Code/TidyAll/Util/Zglob.pm is in libcode-tidyall-perl 0.55~dfsg-2.
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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | # This is a copy of Text::Glob, modified to support "**/"
#
package Code::TidyAll::Util::Zglob;
use strict;
use warnings;
our $VERSION = '0.55';
use Exporter qw(import);
our @EXPORT_OK = qw( zglobs_to_regex zglob_to_regex );
our $strict_leading_dot = 1;
our $strict_wildcard_slash = 1;
use constant debug => 0;
sub zglobs_to_regex {
my @globs = @_;
return @globs ? join( '|', map { "(?:" . zglob_to_regex($_) . ")" } @globs ) : qr/(?!)/;
}
sub zglob_to_regex {
my $glob = shift;
my $regex = zglob_to_regex_string($glob);
return qr/^$regex$/;
}
sub zglob_to_regex_string {
my $glob = shift;
my ( $regex, $in_curlies, $escaping );
local $_;
my $first_byte = 1;
$glob =~ s/\*\*\//\cZ/g; # convert **/ to single character
for ( $glob =~ m/(.)/gs ) {
if ($first_byte) {
if ($strict_leading_dot) {
$regex .= '(?=[^\.])' unless $_ eq '.';
}
$first_byte = 0;
}
if ( $_ eq '/' ) {
$first_byte = 1;
}
if ( $_ eq '.'
|| $_ eq '('
|| $_ eq ')'
|| $_ eq '|'
|| $_ eq '+'
|| $_ eq '^'
|| $_ eq '$'
|| $_ eq '@'
|| $_ eq '%' ) {
$regex .= "\\$_";
}
elsif ( $_ eq "\cZ" ) { # handle **/ - if escaping, only escape first *
$regex .=
$escaping
? ( "\\*" . ( $strict_wildcard_slash ? "[^/]*" : ".*" ) . "/" )
: ".*";
}
elsif ( $_ eq '*' ) {
$regex .=
$escaping ? "\\*"
: $strict_wildcard_slash ? "[^/]*"
: ".*";
}
elsif ( $_ eq '?' ) {
$regex .=
$escaping ? "\\?"
: $strict_wildcard_slash ? "[^/]"
: ".";
}
elsif ( $_ eq '{' ) {
$regex .= $escaping ? "\\{" : "(";
++$in_curlies unless $escaping;
}
elsif ( $_ eq '}' && $in_curlies ) {
$regex .= $escaping ? "}" : ")";
--$in_curlies unless $escaping;
}
elsif ( $_ eq ',' && $in_curlies ) {
$regex .= $escaping ? "," : "|";
}
elsif ( $_ eq "\\" ) {
if ($escaping) {
$regex .= "\\\\";
$escaping = 0;
}
else {
$escaping = 1;
}
next;
}
else {
$regex .= $_;
$escaping = 0;
}
$escaping = 0;
}
print "# $glob $regex\n" if debug;
return $regex;
}
1;
__END__
|