This file is indexed.

/usr/share/perl5/Syntax/Keyword/Junction.pm is in libsyntax-keyword-junction-perl 0.003008-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
 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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
package Syntax::Keyword::Junction;

use strict;
use warnings;

our $VERSION = '0.003008'; # VERSION

# ABSTRACT: Perl6 style Junction operators in Perl5

require Syntax::Keyword::Junction::All;
require Syntax::Keyword::Junction::Any;
require Syntax::Keyword::Junction::None;
require Syntax::Keyword::Junction::One;

use Sub::Exporter::Progressive -setup => {
   exports => [qw( all any none one )],
   groups => {
      default => [qw( all any none one )],
      # for the switch from Exporter
      ALL     => [qw( all any none one )],
   },
};

sub all  { Syntax::Keyword::Junction::All->new(@_)  }
sub any  { Syntax::Keyword::Junction::Any->new(@_)  }
sub none { Syntax::Keyword::Junction::None->new(@_) }
sub one  { Syntax::Keyword::Junction::One->new(@_)  }

1;

__END__

=pod

=encoding UTF-8

=head1 NAME

Syntax::Keyword::Junction - Perl6 style Junction operators in Perl5

=head1 VERSION

version 0.003008

=head1 SYNOPSIS

  use Syntax::Keyword::Junction qw/ all any none one /;

  if (any(@grant) eq 'su') {
    ...
  }

  if (all($foo, $bar) >= 10) {
    ...
  }

  if (qr/^\d+$/ == all(@answers)) {
    ...
  }

  if (all(@input) <= @limits) {
    ...
  }

  if (none(@pass) eq 'password') {
    ...
  }

  if (one(@answer) == 42) {
    ...
  }

or if you want to rename an export, use L<Sub::Exporter> options:

  use Syntax::Keyword::Junction any => { -as => 'robot_any' };

  if (robot_any(@grant) eq 'su') {
    ...
  }

=head1 DESCRIPTION

This is a lightweight module which provides 'Junction' operators, the most
commonly used being C<any> and C<all>.

Inspired by the Perl6 design docs,
L<http://dev.perl.org/perl6/doc/design/exe/E06.html>.

Provides a limited subset of the functionality of L<Quantum::Superpositions>,
see L</"SEE ALSO"> for comment.

Notice in the L</SYNOPSIS> above, that if you want to match against a
regular expression, you must use C<==> or C<!=>. B<Not> C<=~> or C<!~>. You
must also use a regex object, such as C<qr/\d/>, not a plain regex such as
C</\d/>.

=head1 SUBROUTINES

=head2 all()

Returns an object which overloads the following operators:

  '<',  '<=', '>',  '>=', '==', '!=',
  'lt', 'le', 'gt', 'ge', 'eq', 'ne',
  '~~'

Returns true only if B<all> arguments test true according to the operator
used.

=head2 any()

Returns an object which overloads the following operators:

  '<',  '<=', '>',  '>=', '==', '!=',
  'lt', 'le', 'gt', 'ge', 'eq', 'ne',
  '~~'

Returns true if B<any> argument tests true according to the operator used.

=head2 none()

Returns an object which overloads the following operators:

  '<',  '<=', '>',  '>=', '==', '!=',
  'lt', 'le', 'gt', 'ge', 'eq', 'ne',
  '~~'

Returns true only if B<no> argument tests true according to the operator
used.

=head2 one()

Returns an object which overloads the following operators:

  '<',  '<=', '>',  '>=', '==', '!=',
  'lt', 'le', 'gt', 'ge', 'eq', 'ne',
  '~~'

Returns true only if B<one and only one> argument tests true according to
the operator used.

=head1 ALTERING JUNCTIONS

You cannot alter junctions.  Instead, you can create new junctions out of old
junctions.  You can do this by calling the C<values> method on a junction.

 my $numbers = any(qw/1 2 3 4 5/);
 print $numbers == 3 ? 'Yes' : 'No';   # Yes

 $numbers = any( grep { $_ != 3 } $numbers->values );
 print $numbers == 3 ? 'Yes' : 'No';   # No

You can also use the C<map> method:

 my $numbers = any(qw/1 2 3 4 5/);
 my $prime   = $numbers->map( \&is_prime );

 say for $prime->values; # prints 0, 1, 1, 0, 1

=head1 EXPORT

'all', 'any', 'none', 'one', as requested.

All subroutines can be called by its fully qualified name, if you don't
want to export them.

  use Syntax::Keyword::Junction;

  if (Syntax::Keyword::Junction::any( @questions )) {
    ...
  }

=head1 WARNING

When comparing against a regular expression, you must remember to use a
regular expression object: C<qr/\d/> B<Not> C</d/>. You must also use either
C<==> or C<!=>. This is because C<=~> and C<!~> cannot be overridden.

=head1 TO DO

Add overloading for arithmetic operators, such that this works:

  $result = any(2,3,4) * 2;

  if ($result == 8) {...}

=head1 SEE ALSO

This module is actually a fork of L<Perl6::Junction> with very few
(initial) changes.  The reason being that we want to avoid the
incendiary name containing Perl6.

L<Quantum::Superpositions> provides the same functionality as this, and
more. However, this module provides this limited functionality at a much
greater runtime speed, with my benchmarks showing between 500% and 6000%
improvement.

L<http://dev.perl.org/perl6/doc/design/exe/E06.html> - "The Wonderful World
of Junctions".

=head1 AUTHORS

=over 4

=item *

Arthur Axel "fREW" Schmidt <frioux+cpan@gmail.com>

=item *

Carl Franks

=back

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2014 by Arthur Axel "fREW" Schmidt.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut