File: README

package info (click to toggle)
libsyntax-keyword-junction-perl 0.003009-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 260 kB
  • sloc: perl: 869; makefile: 7
file content (189 lines) | stat: -rw-r--r-- 5,298 bytes parent folder | download
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
NAME
    Syntax::Keyword::Junction - Comparisons against multiple values

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) <= scalar @limits) {
        ...
      }

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

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

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

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

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

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

    Inspired by the Perl 6 design docs,
    <https://web.archive.org/web/20230922160729/https://raku.org/archive/doc
    /design/exe/E06.html#The%20Wonderful%20World%20of%20Junctions>.

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

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

SUBROUTINES
  all()
    Returns an object which overloads the following operators:

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

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

  any()
    Returns an object which overloads the following operators:

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

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

  none()
    Returns an object which overloads the following operators:

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

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

  one()
    Returns an object which overloads the following operators:

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

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

ALTERING JUNCTIONS
    You cannot alter junctions. Instead, you can create new junctions out of
    old junctions. You can do this by calling the "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 "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

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 )) {
        ...
      }

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

TO DO
    Add overloading for arithmetic operators, such that this works:

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

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

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

    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.

    <https://web.archive.org/web/20230922160729/https://raku.org/archive/doc
    /design/exe/E06.html#The%20Wonderful%20World%20of%20Junctions> - "The
    Wonderful World of Junctions".

BUGS
    Please report any bugs or feature requests on the bugtracker website
    <https://github.com/haarg/Syntax-Keyword-Junction/issues>

    When submitting a bug or request, please include a test-file or a patch
    to an existing test-file that illustrates the bug or desired feature.

CONTRIBUTORS
    *   Arthur Axel 'fREW' Schmidt <frioux@gmail.com>

    *   Carl Franks <cpan@fireartist.com>

    *   David Steinbrunner <dsteinbrunner@pobox.com>

    *   Graham Knop <haarg@haarg.org>

    *   Maxime Soulé <btik-cpan@scoubidou.com>

    *   Michael Schout <schoutm@gmail.com>

    *   Olivier Mengué <dolmen@cpan.org>

    *   Paul Cochrane <paul.cochrane@posteo.de>

    *   Ricardo Signes <rjbs@cpan.org>

    *   Rob Hoelz <rob@hoelz.ro>

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

    *   Carl Franks

COPYRIGHT AND LICENSE
    This software is copyright (c) 2024 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.