File Coverage

blib/lib/Hydrogen/ArrayRef.pm
Criterion Covered Total %
statement 214 581 36.8
branch 71 356 19.9
condition 20 99 20.2
subroutine 35 84 41.6
pod 62 62 100.0
total 402 1182 34.0


line stmt bran cond sub pod time code
1             # This file was autogenerated.
2 4     4   147488 use 5.008001;
  4         13  
3 4     4   18 use strict;
  4         10  
  4         84  
4 4     4   15 use warnings;
  4         6  
  4         301  
5 4     4   20 no warnings qw( void once );
  4         6  
  4         146  
6 4     4   353 use Hydrogen ();
  4         6  
  4         482  
7              
8             package Hydrogen::ArrayRef;
9              
10             our $AUTHORITY = 'cpan:TOBYINK';
11             our $VERSION = '0.021001';
12              
13             =head1 NAME
14              
15             Hydrogen::ArrayRef - a standard library for arrayrefs
16              
17             =head1 VERSION
18              
19             This documentation is for Hydrogen::ArrayRef 0.021001,
20             which is based on Sub::HandlesVia::HandlerLibrary::Array 0.050005.
21              
22             =cut
23              
24             =head1 FUNCTIONS
25              
26             Each function expects a reference to an array as its first argument.
27              
28             =cut
29              
30 4         42 use Exporter::Shiny qw(
31             accessor
32             all
33             all_true
34             any
35             apply
36             clear
37             count
38             delete
39             elements
40             first
41             first_index
42             flatten
43             flatten_deep
44             for_each
45             for_each_pair
46             get
47             grep
48             head
49             indexed
50             insert
51             is_empty
52             join
53             map
54             max
55             maxstr
56             min
57             minstr
58             natatime
59             not_all_true
60             pairfirst
61             pairgrep
62             pairkeys
63             pairmap
64             pairs
65             pairvalues
66             pick_random
67             pop
68             print
69             product
70             push
71             reduce
72             reductions
73             reset
74             reverse
75             sample
76             set
77             shallow_clone
78             shift
79             shuffle
80             shuffle_in_place
81             sort
82             sort_in_place
83             splice
84             sum
85             tail
86             uniq
87             uniq_in_place
88             uniqnum
89             uniqnum_in_place
90             uniqstr
91             uniqstr_in_place
92             unshift
93 4     4   22 );
  4         6  
94              
95             =head2 C<< accessor( $arrayref, $index, $value? ) >>
96              
97             Additional arguments: B<< Int >>, B<< Optional[Any] >>.
98              
99             Acts like C if given just an index, or C if given an index and value.
100              
101             =cut
102              
103             {
104             my $__signature;
105              
106             sub accessor {
107 2     2 1 207066 my $__REF__ = \$_[0];
108              
109             package Hydrogen::ArrayRef::__SANDBOX__;
110             $__signature ||= sub {
111 2     2   22 my ( %tmp, $tmp );
112              
113 2 50 33     15 @_ >= 2 && @_ <= 3
114             or Hydrogen::croak(
115             "Wrong number of parameters in signature for %s: got %d, %s",
116             "accessor", scalar(@_), "expected exactly 2 parameters" );
117              
118             # Parameter $_[0] (type: ArrayRef)
119 2 50       8 ( ref( $_[0] ) eq 'ARRAY' )
120             or Hydrogen::croak(
121             "Type check failed in signature for accessor: %s should be %s",
122             "\$_[0]", "ArrayRef"
123             );
124              
125             # Parameter $_[1] (type: Int)
126             (
127 2 50       5 do {
128 2         5 my $tmp = $_[1];
129 2 50 33     39 defined($tmp) and !ref($tmp) and $tmp =~ /\A-?[0-9]+\z/;
130             }
131             )
132             or Hydrogen::croak(
133             "Type check failed in signature for accessor: %s should be %s",
134             "\$_[1]", "Int"
135             );
136              
137             # Parameter $_[2] (type: Optional[Any])
138 2 100       11 $#_ >= 2
139             or return (@_);
140 1         2 ( !!1 )
141             or Hydrogen::croak(
142             "Type check failed in signature for accessor: %s should be %s",
143             "\$_[2]", "Optional[Any]"
144             );
145              
146 1         5 (@_);
147 2   66     16 };
148 2         6 @_ = &$__signature;
149 2         5 1;
150 2 100       15 ( ( @_ - 1 ) == 1 )
151             ? ($$__REF__)->[ $_[1] ]
152             : ( ($$__REF__)->[ $_[1] ] = $_[2] );
153             }
154             }
155              
156             =head2 C<< all( $arrayref ) >>
157              
158             All elements in the array, in list context.
159              
160             =cut
161              
162             sub all {
163 1     1 1 4330 my $__REF__ = \$_[0];
164              
165             package Hydrogen::ArrayRef::__SANDBOX__;
166 1 50       4 @_ == 1
167             or Hydrogen::croak( "Wrong number of parameters for all; usage: "
168             . "Hydrogen::ArrayRef::all( \$arrayref )" );
169 1         3 @{$$__REF__};
  1         4  
170             }
171              
172             =head2 C<< all_true( $arrayref, $coderef ) >>
173              
174             Additional arguments: B<< CodeRef >>.
175              
176             Like C<< List::Util::all() >>.
177              
178             =cut
179              
180             sub all_true {
181 0     0 1 0 my $__REF__ = \$_[0];
182              
183             package Hydrogen::ArrayRef::__SANDBOX__;
184 0         0 @_ = do {
185 0         0 my ( %tmp, $tmp );
186              
187 0 0       0 @_ == 2
188             or Hydrogen::croak(
189             "Wrong number of parameters in signature for %s: got %d, %s",
190             "all_true", scalar(@_), "expected exactly 2 parameters" );
191              
192             # Parameter $_[0] (type: ArrayRef)
193 0 0       0 ( ref( $_[0] ) eq 'ARRAY' )
194             or Hydrogen::croak(
195             "Type check failed in signature for all_true: %s should be %s",
196             "\$_[0]", "ArrayRef" );
197              
198             # Parameter $_[1] (type: CodeRef)
199 0 0       0 ( ref( $_[1] ) eq 'CODE' )
200             or Hydrogen::croak(
201             "Type check failed in signature for all_true: %s should be %s",
202             "\$_[1]", "CodeRef" );
203              
204 0         0 (@_);
205             };
206 0         0 &List::Util::all( $_[1], @{$$__REF__} );
  0         0  
207             }
208              
209             =head2 C<< any( $arrayref, $coderef ) >>
210              
211             Additional arguments: B<< CodeRef >>.
212              
213             Like C<< List::Util::any() >>.
214              
215             =cut
216              
217             sub any {
218 1     1 1 6588 my $__REF__ = \$_[0];
219              
220             package Hydrogen::ArrayRef::__SANDBOX__;
221 1         2 @_ = do {
222 1         17 my ( %tmp, $tmp );
223              
224 1 50       5 @_ == 2
225             or Hydrogen::croak(
226             "Wrong number of parameters in signature for %s: got %d, %s",
227             "any", scalar(@_), "expected exactly 2 parameters" );
228              
229             # Parameter $_[0] (type: ArrayRef)
230 1 50       6 ( ref( $_[0] ) eq 'ARRAY' )
231             or Hydrogen::croak(
232             "Type check failed in signature for any: %s should be %s",
233             "\$_[0]", "ArrayRef" );
234              
235             # Parameter $_[1] (type: CodeRef)
236 1 50       6 ( ref( $_[1] ) eq 'CODE' )
237             or Hydrogen::croak(
238             "Type check failed in signature for any: %s should be %s",
239             "\$_[1]", "CodeRef" );
240              
241 1         5 (@_);
242             };
243 1         2 &List::Util::any( $_[1], @{$$__REF__} );
  1         7  
244             }
245              
246             =head2 C<< apply( $arrayref, $coderef ) >>
247              
248             Additional arguments: B<< CodeRef >>.
249              
250             Executes the coderef (which should modify C<< $_ >>) against each element of the array; returns the resulting array in list context.
251              
252             =cut
253              
254             sub apply {
255 0     0 1 0 my $__REF__ = \$_[0];
256              
257             package Hydrogen::ArrayRef::__SANDBOX__;
258 0         0 @_ = do {
259 0         0 my ( %tmp, $tmp );
260              
261 0 0       0 @_ == 2
262             or Hydrogen::croak(
263             "Wrong number of parameters in signature for %s: got %d, %s",
264             "apply", scalar(@_), "expected exactly 2 parameters" );
265              
266             # Parameter $_[0] (type: ArrayRef)
267 0 0       0 ( ref( $_[0] ) eq 'ARRAY' )
268             or Hydrogen::croak(
269             "Type check failed in signature for apply: %s should be %s",
270             "\$_[0]", "ArrayRef" );
271              
272             # Parameter $_[1] (type: CodeRef)
273 0 0       0 ( ref( $_[1] ) eq 'CODE' )
274             or Hydrogen::croak(
275             "Type check failed in signature for apply: %s should be %s",
276             "\$_[1]", "CodeRef" );
277              
278 0         0 (@_);
279             };
280 0         0 my @shv_tmp = @{$$__REF__};
  0         0  
281 0         0 &{ $_[1] } foreach @shv_tmp;
  0         0  
282 0 0       0 wantarray ? @shv_tmp : $shv_tmp[-1];
283             }
284              
285             =head2 C<< clear( $arrayref ) >>
286              
287             Empties the array.
288              
289             =cut
290              
291             sub clear {
292 1     1 1 6039 my $__REF__ = \$_[0];
293              
294             package Hydrogen::ArrayRef::__SANDBOX__;
295 1 50       6 @_ == 1
296             or Hydrogen::croak( "Wrong number of parameters for clear; usage: "
297             . "Hydrogen::ArrayRef::clear( \$arrayref )" );
298 1         2 1;
299 1         3 @{$$__REF__} = ();
  1         4  
300             }
301              
302             =head2 C<< count( $arrayref ) >>
303              
304             The number of elements in the referenced array.
305              
306             =cut
307              
308             sub count {
309 1     1 1 3771 my $__REF__ = \$_[0];
310              
311             package Hydrogen::ArrayRef::__SANDBOX__;
312 1 50       7 @_ == 1
313             or Hydrogen::croak( "Wrong number of parameters for count; usage: "
314             . "Hydrogen::ArrayRef::count( \$arrayref )" );
315 1         3 scalar( @{$$__REF__} );
  1         6  
316             }
317              
318             =head2 C<< delete( $arrayref, $index ) >>
319              
320             Additional arguments: B<< Int >>.
321              
322             Removes the indexed element from the array and returns it. Elements after it will be "moved up".
323              
324             =cut
325              
326             sub delete {
327 0     0 1 0 my $__REF__ = \$_[0];
328              
329             package Hydrogen::ArrayRef::__SANDBOX__;
330 0         0 @_ = do {
331 0         0 my ( %tmp, $tmp );
332              
333 0 0       0 @_ == 2
334             or Hydrogen::croak(
335             "Wrong number of parameters in signature for %s: got %d, %s",
336             "delete", scalar(@_), "expected exactly 2 parameters" );
337              
338             # Parameter $_[0] (type: ArrayRef)
339 0 0       0 ( ref( $_[0] ) eq 'ARRAY' )
340             or Hydrogen::croak(
341             "Type check failed in signature for delete: %s should be %s",
342             "\$_[0]", "ArrayRef" );
343              
344             # Parameter $_[1] (type: Int)
345             (
346 0 0       0 do {
347 0         0 my $tmp = $_[1];
348 0 0 0     0 defined($tmp) and !ref($tmp) and $tmp =~ /\A-?[0-9]+\z/;
349             }
350             )
351             or Hydrogen::croak(
352             "Type check failed in signature for delete: %s should be %s",
353             "\$_[1]", "Int" );
354              
355 0         0 (@_);
356             };
357 0         0 1;
358 0         0 splice( @{$$__REF__}, $_[1], 1 );
  0         0  
359             }
360              
361             =head2 C<< elements( $arrayref ) >>
362              
363             All elements in the array, in list context. (Essentially the same as C.)
364              
365             =cut
366              
367             sub elements {
368 1     1 1 6173 my $__REF__ = \$_[0];
369              
370             package Hydrogen::ArrayRef::__SANDBOX__;
371 1 50       7 @_ == 1
372             or Hydrogen::croak( "Wrong number of parameters for elements; usage: "
373             . "Hydrogen::ArrayRef::elements( \$arrayref )" );
374 1         3 @{$$__REF__};
  1         4  
375             }
376              
377             =head2 C<< first( $arrayref, $coderef ) >>
378              
379             Additional arguments: B<< CodeRef >>.
380              
381             Like C<< List::Util::first() >>.
382              
383             =cut
384              
385             sub first {
386 1     1 1 4130 my $__REF__ = \$_[0];
387              
388             package Hydrogen::ArrayRef::__SANDBOX__;
389 1         4 @_ = do {
390 1         2 my ( %tmp, $tmp );
391              
392 1 50       5 @_ == 2
393             or Hydrogen::croak(
394             "Wrong number of parameters in signature for %s: got %d, %s",
395             "first", scalar(@_), "expected exactly 2 parameters" );
396              
397             # Parameter $_[0] (type: ArrayRef)
398 1 50       6 ( ref( $_[0] ) eq 'ARRAY' )
399             or Hydrogen::croak(
400             "Type check failed in signature for first: %s should be %s",
401             "\$_[0]", "ArrayRef" );
402              
403             # Parameter $_[1] (type: CodeRef)
404 1 50       5 ( ref( $_[1] ) eq 'CODE' )
405             or Hydrogen::croak(
406             "Type check failed in signature for first: %s should be %s",
407             "\$_[1]", "CodeRef" );
408              
409 1         4 (@_);
410             };
411 1         3 &List::Util::first( $_[1], @{$$__REF__} );
  1         9  
412             }
413              
414             =head2 C<< first_index( $arrayref, $coderef ) >>
415              
416             Additional arguments: B<< CodeRef >>.
417              
418             Like C<< List::MoreUtils::first_index() >>.
419              
420             =cut
421              
422             sub first_index {
423 1     1 1 3786 my $__REF__ = \$_[0];
424              
425             package Hydrogen::ArrayRef::__SANDBOX__;
426 1         2 @_ = do {
427 1         3 my ( %tmp, $tmp );
428              
429 1 50       5 @_ == 2
430             or Hydrogen::croak(
431             "Wrong number of parameters in signature for %s: got %d, %s",
432             "first_index", scalar(@_), "expected exactly 2 parameters" );
433              
434             # Parameter $_[0] (type: ArrayRef)
435 1 50       6 ( ref( $_[0] ) eq 'ARRAY' )
436             or Hydrogen::croak(
437             "Type check failed in signature for first_index: %s should be %s",
438             "\$_[0]", "ArrayRef" );
439              
440             # Parameter $_[1] (type: CodeRef)
441 1 50       7 ( ref( $_[1] ) eq 'CODE' )
442             or Hydrogen::croak(
443             "Type check failed in signature for first_index: %s should be %s",
444             "\$_[1]", "CodeRef" );
445              
446 1         4 (@_);
447             };
448 1         3 for my $i ( 0 .. $#{$$__REF__} ) {
  1         6  
449 3         17 local *_ = \$$__REF__->[$i];
450 3 100       8 return $i if $_[1]->($_);
451             };
452 0         0 return -1;
453             }
454              
455             =head2 C<< flatten( $arrayref ) >>
456              
457             All elements in the array, in list context. (Essentially the same as C.)
458              
459             =cut
460              
461             sub flatten {
462 1     1 1 3775 my $__REF__ = \$_[0];
463              
464             package Hydrogen::ArrayRef::__SANDBOX__;
465 1 50       6 @_ == 1
466             or Hydrogen::croak( "Wrong number of parameters for flatten; usage: "
467             . "Hydrogen::ArrayRef::flatten( \$arrayref )" );
468 1         2 @{$$__REF__};
  1         5  
469             }
470              
471             =head2 C<< flatten_deep( $arrayref, $depth? ) >>
472              
473             Additional arguments: B<< Optional[Int] >>.
474              
475             Flattens the arrayref into a list, including any nested arrayrefs. (Has the potential to loop infinitely.)
476              
477             =cut
478              
479             {
480             my $__signature;
481              
482             sub flatten_deep {
483 2     2 1 4133 my $__REF__ = \$_[0];
484              
485             package Hydrogen::ArrayRef::__SANDBOX__;
486             $__signature ||= sub {
487 2     2   4 my ( %tmp, $tmp );
488              
489 2 50 33     12 @_ >= 1 && @_ <= 2
490             or Hydrogen::croak(
491             "Wrong number of parameters in signature for %s: got %d, %s",
492             "flatten_deep", scalar(@_), "expected exactly 1 parameters" );
493              
494             # Parameter $_[0] (type: ArrayRef)
495 2 50       8 ( ref( $_[0] ) eq 'ARRAY' )
496             or Hydrogen::croak(
497             "Type check failed in signature for flatten_deep: %s should be %s",
498             "\$_[0]", "ArrayRef"
499             );
500              
501             # Parameter $_[1] (type: Optional[Int])
502 2 100       9 $#_ >= 1
503             or return (@_);
504             (
505 1 50       2 do {
506 1         3 my $tmp = $_[1];
507 1 50 33     16 defined($tmp) and !ref($tmp) and $tmp =~ /\A-?[0-9]+\z/;
508             }
509             )
510             or Hydrogen::croak(
511             "Type check failed in signature for flatten_deep: %s should be %s",
512             "\$_[1]", "Optional[Int]"
513             );
514              
515 1         4 (@_);
516 2   66     40 };
517 2         5 @_ = &$__signature;
518 2         5 my $shv_fd;
519             $shv_fd = sub {
520 5     5   12 my $d = pop;
521 5 100       13 --$d if defined $d;
522 5 100 100     51 map ref() eq "ARRAY"
    100          
523             ? ( defined $d && $d < 0 )
524             ? $_
525             : $shv_fd->( @$_, $d )
526             : $_, @_;
527 2         12 };
528 2         4 $shv_fd->( @{$$__REF__}, $_[1] );
  2         10  
529             }
530             }
531              
532             =head2 C<< for_each( $arrayref, $coderef ) >>
533              
534             Additional arguments: B<< CodeRef >>.
535              
536             Function which executes the coderef on each element of the array. The coderef will be passed two values: the element and its index. The element will also be available as C<< $_ >>.
537              
538             =cut
539              
540             sub for_each {
541 1     1 1 4862 my $__REF__ = \$_[0];
542              
543             package Hydrogen::ArrayRef::__SANDBOX__;
544 1         3 @_ = do {
545 1         3 my ( %tmp, $tmp );
546              
547 1 50       6 @_ == 2
548             or Hydrogen::croak(
549             "Wrong number of parameters in signature for %s: got %d, %s",
550             "for_each", scalar(@_), "expected exactly 2 parameters" );
551              
552             # Parameter $_[0] (type: ArrayRef)
553 1 50       5 ( ref( $_[0] ) eq 'ARRAY' )
554             or Hydrogen::croak(
555             "Type check failed in signature for for_each: %s should be %s",
556             "\$_[0]", "ArrayRef" );
557              
558             # Parameter $_[1] (type: CodeRef)
559 1 50       4 ( ref( $_[1] ) eq 'CODE' )
560             or Hydrogen::croak(
561             "Type check failed in signature for for_each: %s should be %s",
562             "\$_[1]", "CodeRef" );
563              
564 1         5 (@_);
565             };
566 1         3 my $shv_tmp = $$__REF__;
567             {
568 1         2 local $_;
  1         3  
569 1         2 foreach my $shv_index ( 0 .. $#{$shv_tmp} ) {
  1         5  
570 3         1057 &{ $_[1] }( $_ = $shv_tmp->[$shv_index], $shv_index );
  3         9  
571             }
572             }
573 1         508 $__REF__;
574             }
575              
576             =head2 C<< for_each_pair( $arrayref, $coderef ) >>
577              
578             Additional arguments: B<< CodeRef >>.
579              
580             Function which executes the coderef on each pair of elements in the array. The coderef will be passed the two elements.
581              
582             =cut
583              
584             sub for_each_pair {
585 0     0 1 0 my $__REF__ = \$_[0];
586              
587             package Hydrogen::ArrayRef::__SANDBOX__;
588 0         0 @_ = do {
589 0         0 my ( %tmp, $tmp );
590              
591 0 0       0 @_ == 2
592             or Hydrogen::croak(
593             "Wrong number of parameters in signature for %s: got %d, %s",
594             "for_each_pair", scalar(@_), "expected exactly 2 parameters" );
595              
596             # Parameter $_[0] (type: ArrayRef)
597 0 0       0 ( ref( $_[0] ) eq 'ARRAY' )
598             or Hydrogen::croak(
599             "Type check failed in signature for for_each_pair: %s should be %s",
600             "\$_[0]", "ArrayRef"
601             );
602              
603             # Parameter $_[1] (type: CodeRef)
604 0 0       0 ( ref( $_[1] ) eq 'CODE' )
605             or Hydrogen::croak(
606             "Type check failed in signature for for_each_pair: %s should be %s",
607             "\$_[1]", "CodeRef"
608             );
609              
610 0         0 (@_);
611             };
612 0         0 for ( my $shv_index = 0 ; $shv_index < @{$$__REF__} ; $shv_index += 2 ) {
  0         0  
613 0         0 &{ $_[1] }( ($$__REF__)->[$shv_index], ($$__REF__)->[ $shv_index + 1 ] );
  0         0  
614             };
615 0         0 $__REF__;
616             }
617              
618             =head2 C<< get( $arrayref, $index ) >>
619              
620             Additional arguments: B<< Int >>.
621              
622             Returns a single element from the array by index.
623              
624             =cut
625              
626             sub get {
627 3     3 1 5948 my $__REF__ = \$_[0];
628              
629             package Hydrogen::ArrayRef::__SANDBOX__;
630 3         7 @_ = do {
631 3         6 my ( %tmp, $tmp );
632              
633 3 50       10 @_ == 2
634             or Hydrogen::croak(
635             "Wrong number of parameters in signature for %s: got %d, %s",
636             "get", scalar(@_), "expected exactly 2 parameters" );
637              
638             # Parameter $_[0] (type: ArrayRef)
639 3 50       12 ( ref( $_[0] ) eq 'ARRAY' )
640             or Hydrogen::croak(
641             "Type check failed in signature for get: %s should be %s",
642             "\$_[0]", "ArrayRef" );
643              
644             # Parameter $_[1] (type: Int)
645             (
646 3 50       6 do {
647 3         5 my $tmp = $_[1];
648 3 50 33     71 defined($tmp) and !ref($tmp) and $tmp =~ /\A-?[0-9]+\z/;
649             }
650             )
651             or Hydrogen::croak(
652             "Type check failed in signature for get: %s should be %s",
653             "\$_[1]", "Int" );
654              
655 3         13 (@_);
656             };
657 3         60 ($$__REF__)->[ $_[1] ];
658             }
659              
660             =head2 C<< grep( $arrayref, $coderef ) >>
661              
662             Additional arguments: B<< CodeRef >>.
663              
664             Like C from L.
665              
666             =cut
667              
668             sub grep {
669 0     0 1 0 my $__REF__ = \$_[0];
670              
671             package Hydrogen::ArrayRef::__SANDBOX__;
672 0         0 @_ = do {
673 0         0 my ( %tmp, $tmp );
674              
675 0 0       0 @_ == 2
676             or Hydrogen::croak(
677             "Wrong number of parameters in signature for %s: got %d, %s",
678             "grep", scalar(@_), "expected exactly 2 parameters" );
679              
680             # Parameter $_[0] (type: ArrayRef)
681 0 0       0 ( ref( $_[0] ) eq 'ARRAY' )
682             or Hydrogen::croak(
683             "Type check failed in signature for grep: %s should be %s",
684             "\$_[0]", "ArrayRef" );
685              
686             # Parameter $_[1] (type: CodeRef)
687 0 0       0 ( ref( $_[1] ) eq 'CODE' )
688             or Hydrogen::croak(
689             "Type check failed in signature for grep: %s should be %s",
690             "\$_[1]", "CodeRef" );
691              
692 0         0 (@_);
693             };
694 0         0 grep( $_[1]->($_), @{$$__REF__} );
  0         0  
695             }
696              
697             =head2 C<< head( $arrayref, $count ) >>
698              
699             Additional arguments: B<< Int >>.
700              
701             Returns the first C<< $count >> elements of the array in list context.
702              
703             =cut
704              
705             sub head {
706 0     0 1 0 my $__REF__ = \$_[0];
707              
708             package Hydrogen::ArrayRef::__SANDBOX__;
709 0         0 @_ = do {
710 0         0 my ( %tmp, $tmp );
711              
712 0 0       0 @_ == 2
713             or Hydrogen::croak(
714             "Wrong number of parameters in signature for %s: got %d, %s",
715             "head", scalar(@_), "expected exactly 2 parameters" );
716              
717             # Parameter $_[0] (type: ArrayRef)
718 0 0       0 ( ref( $_[0] ) eq 'ARRAY' )
719             or Hydrogen::croak(
720             "Type check failed in signature for head: %s should be %s",
721             "\$_[0]", "ArrayRef" );
722              
723             # Parameter $_[1] (type: Int)
724             (
725 0 0       0 do {
726 0         0 my $tmp = $_[1];
727 0 0 0     0 defined($tmp) and !ref($tmp) and $tmp =~ /\A-?[0-9]+\z/;
728             }
729             )
730             or Hydrogen::croak(
731             "Type check failed in signature for head: %s should be %s",
732             "\$_[1]", "Int" );
733              
734 0         0 (@_);
735             };
736 0         0 my $shv_count = $_[1];
737 0 0       0 $shv_count = @{$$__REF__} if $shv_count > @{$$__REF__};
  0         0  
  0         0  
738 0 0       0 $shv_count = @{$$__REF__} + $shv_count if $shv_count < 0;
  0         0  
739 0         0 ( @{$$__REF__} )[ 0 .. ( $shv_count - 1 ) ];
  0         0  
740             }
741              
742             =head2 C<< indexed( $arrayref ) >>
743              
744             Like C from L.
745              
746             =cut
747              
748             sub indexed {
749 0     0 1 0 my $__REF__ = \$_[0];
750              
751             package Hydrogen::ArrayRef::__SANDBOX__;
752 0 0       0 @_ == 1
753             or Hydrogen::croak( "Wrong number of parameters for indexed; usage: "
754             . "Hydrogen::ArrayRef::indexed( \$arrayref )" );
755 0         0 my $shv_ix = 0;
756 0         0 map +( $shv_ix++, $_ ), @{$$__REF__};
  0         0  
757             }
758              
759             =head2 C<< insert( $arrayref, $index, $value ) >>
760              
761             Additional arguments: B<< Int >>, B<< Any >>.
762              
763             Inserts a value into the array with the given index. Elements after it will be "moved down".
764              
765             =cut
766              
767             sub insert {
768 1     1 1 11191 my $__REF__ = \$_[0];
769              
770             package Hydrogen::ArrayRef::__SANDBOX__;
771 1         3 @_ = do {
772 1         2 my ( %tmp, $tmp );
773              
774 1 50       4 @_ == 3
775             or Hydrogen::croak(
776             "Wrong number of parameters in signature for %s: got %d, %s",
777             "insert", scalar(@_), "expected exactly 3 parameters" );
778              
779             # Parameter $_[0] (type: ArrayRef)
780 1 50       5 ( ref( $_[0] ) eq 'ARRAY' )
781             or Hydrogen::croak(
782             "Type check failed in signature for insert: %s should be %s",
783             "\$_[0]", "ArrayRef" );
784              
785             # Parameter $_[1] (type: Int)
786             (
787 1 50       3 do {
788 1         2 my $tmp = $_[1];
789 1 50 33     30 defined($tmp) and !ref($tmp) and $tmp =~ /\A-?[0-9]+\z/;
790             }
791             )
792             or Hydrogen::croak(
793             "Type check failed in signature for insert: %s should be %s",
794             "\$_[1]", "Int" );
795              
796             # Parameter $_[2] (type: Any)
797 1         2 1; # ... nothing to do
798              
799 1         4 (@_);
800             };
801 1         3 1;
802 1         2 splice( @{$$__REF__}, $_[1], 0, $_[2] );
  1         6  
803             }
804              
805             =head2 C<< is_empty( $arrayref ) >>
806              
807             Boolean indicating if the referenced array is empty.
808              
809             =cut
810              
811             sub is_empty {
812 2     2 1 12845 my $__REF__ = \$_[0];
813              
814             package Hydrogen::ArrayRef::__SANDBOX__;
815 2 50       9 @_ == 1
816             or Hydrogen::croak( "Wrong number of parameters for is_empty; usage: "
817             . "Hydrogen::ArrayRef::is_empty( \$arrayref )" );
818 2         5 !scalar( @{$$__REF__} );
  2         11  
819             }
820              
821             =head2 C<< join( $arrayref, $with? ) >>
822              
823             Additional arguments: B<< Optional[Str] >>.
824              
825             Returns a string joining all the elements in the array; if C<< $with >> is omitted, defaults to a comma.
826              
827             =cut
828              
829             {
830             my $__signature;
831              
832             sub join {
833 2     2 1 8218 my $__REF__ = \$_[0];
834              
835             package Hydrogen::ArrayRef::__SANDBOX__;
836             $__signature ||= sub {
837 2     2   4 my ( %tmp, $tmp );
838              
839 2 50 33     13 @_ >= 1 && @_ <= 2
840             or Hydrogen::croak(
841             "Wrong number of parameters in signature for %s: got %d, %s",
842             "join", scalar(@_), "expected exactly 1 parameters" );
843              
844             # Parameter $_[0] (type: ArrayRef)
845 2 50       8 ( ref( $_[0] ) eq 'ARRAY' )
846             or Hydrogen::croak(
847             "Type check failed in signature for join: %s should be %s",
848             "\$_[0]", "ArrayRef" );
849              
850             # Parameter $_[1] (type: Optional[Str])
851 2 100       10 $#_ >= 1
852             or return (@_);
853 1 50       3 do {
854              
855             package Hydrogen::ArrayRef::__SANDBOX__;
856 1 50       5 defined( $_[1] ) and do {
857 1 50       9 ref( \$_[1] ) eq 'SCALAR'
858             or ref( \( my $val = $_[1] ) ) eq 'SCALAR';
859             }
860             }
861             or Hydrogen::croak(
862             "Type check failed in signature for join: %s should be %s",
863             "\$_[1]", "Optional[Str]" );
864              
865 1         4 (@_);
866 2   66     18 };
867 2         6 @_ = &$__signature;
868 2 100       8 my $shv_param_with = ( @_ - 1 ) ? $_[1] : q[,];
869 2         4 join( $shv_param_with, @{$$__REF__} );
  2         32  
870             }
871             }
872              
873             =head2 C<< map( $arrayref, $coderef ) >>
874              
875             Additional arguments: B<< CodeRef >>.
876              
877             Like C from L.
878              
879             =cut
880              
881             sub map {
882 0     0 1 0 my $__REF__ = \$_[0];
883              
884             package Hydrogen::ArrayRef::__SANDBOX__;
885 0         0 @_ = do {
886 0         0 my ( %tmp, $tmp );
887              
888 0 0       0 @_ == 2
889             or Hydrogen::croak(
890             "Wrong number of parameters in signature for %s: got %d, %s",
891             "map", scalar(@_), "expected exactly 2 parameters" );
892              
893             # Parameter $_[0] (type: ArrayRef)
894 0 0       0 ( ref( $_[0] ) eq 'ARRAY' )
895             or Hydrogen::croak(
896             "Type check failed in signature for map: %s should be %s",
897             "\$_[0]", "ArrayRef" );
898              
899             # Parameter $_[1] (type: CodeRef)
900 0 0       0 ( ref( $_[1] ) eq 'CODE' )
901             or Hydrogen::croak(
902             "Type check failed in signature for map: %s should be %s",
903             "\$_[1]", "CodeRef" );
904              
905 0         0 (@_);
906             };
907 0         0 map( $_[1]->($_), @{$$__REF__} );
  0         0  
908             }
909              
910             =head2 C<< max( $arrayref ) >>
911              
912             Like C<< List::Util::max() >>.
913              
914             =cut
915              
916             sub max {
917 0     0 1 0 my $__REF__ = \$_[0];
918              
919             package Hydrogen::ArrayRef::__SANDBOX__;
920 0 0       0 @_ == 1
921             or Hydrogen::croak( "Wrong number of parameters for max; usage: "
922             . "Hydrogen::ArrayRef::max( \$arrayref )" );
923 0         0 &List::Util::max( @{$$__REF__} );
  0         0  
924             }
925              
926             =head2 C<< maxstr( $arrayref ) >>
927              
928             Like C<< List::Util::maxstr() >>.
929              
930             =cut
931              
932             sub maxstr {
933 0     0 1 0 my $__REF__ = \$_[0];
934              
935             package Hydrogen::ArrayRef::__SANDBOX__;
936 0 0       0 @_ == 1
937             or Hydrogen::croak( "Wrong number of parameters for maxstr; usage: "
938             . "Hydrogen::ArrayRef::maxstr( \$arrayref )" );
939 0         0 &List::Util::maxstr( @{$$__REF__} );
  0         0  
940             }
941              
942             =head2 C<< min( $arrayref ) >>
943              
944             Like C<< List::Util::min() >>.
945              
946             =cut
947              
948             sub min {
949 0     0 1 0 my $__REF__ = \$_[0];
950              
951             package Hydrogen::ArrayRef::__SANDBOX__;
952 0 0       0 @_ == 1
953             or Hydrogen::croak( "Wrong number of parameters for min; usage: "
954             . "Hydrogen::ArrayRef::min( \$arrayref )" );
955 0         0 &List::Util::min( @{$$__REF__} );
  0         0  
956             }
957              
958             =head2 C<< minstr( $arrayref ) >>
959              
960             Like C<< List::Util::minstr() >>.
961              
962             =cut
963              
964             sub minstr {
965 0     0 1 0 my $__REF__ = \$_[0];
966              
967             package Hydrogen::ArrayRef::__SANDBOX__;
968 0 0       0 @_ == 1
969             or Hydrogen::croak( "Wrong number of parameters for minstr; usage: "
970             . "Hydrogen::ArrayRef::minstr( \$arrayref )" );
971 0         0 &List::Util::minstr( @{$$__REF__} );
  0         0  
972             }
973              
974             =head2 C<< natatime( $arrayref, $n, $callback? ) >>
975              
976             Additional arguments: B<< Int >>, B<< Optional[CodeRef] >>.
977              
978             Given just a number, returns an iterator which reads that many elements from the array at a time. If also given a callback, calls the callback repeatedly with those values.
979              
980             =cut
981              
982             {
983             my $__signature;
984              
985             sub natatime {
986 1     1 1 16089 my $__REF__ = \$_[0];
987              
988             package Hydrogen::ArrayRef::__SANDBOX__;
989             $__signature ||= sub {
990 1     1   2 my ( %tmp, $tmp );
991              
992 1 50 33     9 @_ >= 2 && @_ <= 3
993             or Hydrogen::croak(
994             "Wrong number of parameters in signature for %s: got %d, %s",
995             "natatime", scalar(@_), "expected exactly 2 parameters" );
996              
997             # Parameter $_[0] (type: ArrayRef)
998 1 50       5 ( ref( $_[0] ) eq 'ARRAY' )
999             or Hydrogen::croak(
1000             "Type check failed in signature for natatime: %s should be %s",
1001             "\$_[0]", "ArrayRef"
1002             );
1003              
1004             # Parameter $_[1] (type: Int)
1005             (
1006 1 50       2 do {
1007 1         3 my $tmp = $_[1];
1008 1 50 33     17 defined($tmp) and !ref($tmp) and $tmp =~ /\A-?[0-9]+\z/;
1009             }
1010             )
1011             or Hydrogen::croak(
1012             "Type check failed in signature for natatime: %s should be %s",
1013             "\$_[1]", "Int"
1014             );
1015              
1016             # Parameter $_[2] (type: Optional[CodeRef])
1017 1 50       25 $#_ >= 2
1018             or return (@_);
1019 0 0       0 ( ref( $_[2] ) eq 'CODE' )
1020             or Hydrogen::croak(
1021             "Type check failed in signature for natatime: %s should be %s",
1022             "\$_[2]", "Optional[CodeRef]"
1023             );
1024              
1025 0         0 (@_);
1026 1   33     15 };
1027 1         4 @_ = &$__signature;
1028 1         3 my @shv_remaining = @{$$__REF__};
  1         4  
1029 1         3 my $shv_n = $_[1];
1030 1     2   5 my $shv_iterator = sub { CORE::splice @shv_remaining, 0, $shv_n };
  2         20  
1031 1 50       7 if ( $_[2] ) {
1032 0         0 while ( my @shv_values = $shv_iterator->() ) {
1033 0         0 $_[2]->(@shv_values);
1034             }
1035             }
1036 1         4 else { $shv_iterator }
1037             }
1038             }
1039              
1040             =head2 C<< not_all_true( $arrayref, $coderef ) >>
1041              
1042             Additional arguments: B<< CodeRef >>.
1043              
1044             Like C<< List::Util::notall() >>.
1045              
1046             =cut
1047              
1048             sub not_all_true {
1049 0     0 1 0 my $__REF__ = \$_[0];
1050              
1051             package Hydrogen::ArrayRef::__SANDBOX__;
1052 0         0 @_ = do {
1053 0         0 my ( %tmp, $tmp );
1054              
1055 0 0       0 @_ == 2
1056             or Hydrogen::croak(
1057             "Wrong number of parameters in signature for %s: got %d, %s",
1058             "not_all_true", scalar(@_), "expected exactly 2 parameters" );
1059              
1060             # Parameter $_[0] (type: ArrayRef)
1061 0 0       0 ( ref( $_[0] ) eq 'ARRAY' )
1062             or Hydrogen::croak(
1063             "Type check failed in signature for not_all_true: %s should be %s",
1064             "\$_[0]", "ArrayRef"
1065             );
1066              
1067             # Parameter $_[1] (type: CodeRef)
1068 0 0       0 ( ref( $_[1] ) eq 'CODE' )
1069             or Hydrogen::croak(
1070             "Type check failed in signature for not_all_true: %s should be %s",
1071             "\$_[1]", "CodeRef"
1072             );
1073              
1074 0         0 (@_);
1075             };
1076 0         0 &List::Util::notall( $_[1], @{$$__REF__} );
  0         0  
1077             }
1078              
1079             =head2 C<< pairfirst( $arrayref, $coderef ) >>
1080              
1081             Additional arguments: B<< CodeRef >>.
1082              
1083             Like C<< List::Util::pairfirst() >>.
1084              
1085             =cut
1086              
1087             sub pairfirst {
1088 0     0 1 0 my $__REF__ = \$_[0];
1089              
1090             package Hydrogen::ArrayRef::__SANDBOX__;
1091 0         0 @_ = do {
1092 0         0 my ( %tmp, $tmp );
1093              
1094 0 0       0 @_ == 2
1095             or Hydrogen::croak(
1096             "Wrong number of parameters in signature for %s: got %d, %s",
1097             "pairfirst", scalar(@_), "expected exactly 2 parameters" );
1098              
1099             # Parameter $_[0] (type: ArrayRef)
1100 0 0       0 ( ref( $_[0] ) eq 'ARRAY' )
1101             or Hydrogen::croak(
1102             "Type check failed in signature for pairfirst: %s should be %s",
1103             "\$_[0]", "ArrayRef" );
1104              
1105             # Parameter $_[1] (type: CodeRef)
1106 0 0       0 ( ref( $_[1] ) eq 'CODE' )
1107             or Hydrogen::croak(
1108             "Type check failed in signature for pairfirst: %s should be %s",
1109             "\$_[1]", "CodeRef" );
1110              
1111 0         0 (@_);
1112             };
1113 0     0   0 List::Util::pairfirst { $_[1]->($_) } @{$$__REF__};
  0         0  
  0         0  
1114             }
1115              
1116             =head2 C<< pairgrep( $arrayref, $coderef ) >>
1117              
1118             Additional arguments: B<< CodeRef >>.
1119              
1120             Like C<< List::Util::pairgrep() >>.
1121              
1122             =cut
1123              
1124             sub pairgrep {
1125 0     0 1 0 my $__REF__ = \$_[0];
1126              
1127             package Hydrogen::ArrayRef::__SANDBOX__;
1128 0         0 @_ = do {
1129 0         0 my ( %tmp, $tmp );
1130              
1131 0 0       0 @_ == 2
1132             or Hydrogen::croak(
1133             "Wrong number of parameters in signature for %s: got %d, %s",
1134             "pairgrep", scalar(@_), "expected exactly 2 parameters" );
1135              
1136             # Parameter $_[0] (type: ArrayRef)
1137 0 0       0 ( ref( $_[0] ) eq 'ARRAY' )
1138             or Hydrogen::croak(
1139             "Type check failed in signature for pairgrep: %s should be %s",
1140             "\$_[0]", "ArrayRef" );
1141              
1142             # Parameter $_[1] (type: CodeRef)
1143 0 0       0 ( ref( $_[1] ) eq 'CODE' )
1144             or Hydrogen::croak(
1145             "Type check failed in signature for pairgrep: %s should be %s",
1146             "\$_[1]", "CodeRef" );
1147              
1148 0         0 (@_);
1149             };
1150 0     0   0 List::Util::pairgrep { $_[1]->($_) } @{$$__REF__};
  0         0  
  0         0  
1151             }
1152              
1153             =head2 C<< pairkeys( $arrayref ) >>
1154              
1155             Like C<< List::Util::pairkeys() >>.
1156              
1157             =cut
1158              
1159             sub pairkeys {
1160 0     0 1 0 my $__REF__ = \$_[0];
1161              
1162             package Hydrogen::ArrayRef::__SANDBOX__;
1163 0 0       0 @_ == 1
1164             or Hydrogen::croak( "Wrong number of parameters for pairkeys; usage: "
1165             . "Hydrogen::ArrayRef::pairkeys( \$arrayref )" );
1166 0         0 &List::Util::pairkeys( @{$$__REF__} );
  0         0  
1167             }
1168              
1169             =head2 C<< pairmap( $arrayref, $coderef ) >>
1170              
1171             Additional arguments: B<< CodeRef >>.
1172              
1173             Like C<< List::Util::pairmap() >>.
1174              
1175             =cut
1176              
1177             sub pairmap {
1178 0     0 1 0 my $__REF__ = \$_[0];
1179              
1180             package Hydrogen::ArrayRef::__SANDBOX__;
1181 0         0 @_ = do {
1182 0         0 my ( %tmp, $tmp );
1183              
1184 0 0       0 @_ == 2
1185             or Hydrogen::croak(
1186             "Wrong number of parameters in signature for %s: got %d, %s",
1187             "pairmap", scalar(@_), "expected exactly 2 parameters" );
1188              
1189             # Parameter $_[0] (type: ArrayRef)
1190 0 0       0 ( ref( $_[0] ) eq 'ARRAY' )
1191             or Hydrogen::croak(
1192             "Type check failed in signature for pairmap: %s should be %s",
1193             "\$_[0]", "ArrayRef" );
1194              
1195             # Parameter $_[1] (type: CodeRef)
1196 0 0       0 ( ref( $_[1] ) eq 'CODE' )
1197             or Hydrogen::croak(
1198             "Type check failed in signature for pairmap: %s should be %s",
1199             "\$_[1]", "CodeRef" );
1200              
1201 0         0 (@_);
1202             };
1203 0     0   0 List::Util::pairmap { $_[1]->($_) } @{$$__REF__};
  0         0  
  0         0  
1204             }
1205              
1206             =head2 C<< pairs( $arrayref ) >>
1207              
1208             Like C<< List::Util::pairs() >>.
1209              
1210             =cut
1211              
1212             sub pairs {
1213 0     0 1 0 my $__REF__ = \$_[0];
1214              
1215             package Hydrogen::ArrayRef::__SANDBOX__;
1216 0 0       0 @_ == 1
1217             or Hydrogen::croak( "Wrong number of parameters for pairs; usage: "
1218             . "Hydrogen::ArrayRef::pairs( \$arrayref )" );
1219 0         0 &List::Util::pairs( @{$$__REF__} );
  0         0  
1220             }
1221              
1222             =head2 C<< pairvalues( $arrayref ) >>
1223              
1224             Like C<< List::Util::pairvalues() >>.
1225              
1226             =cut
1227              
1228             sub pairvalues {
1229 0     0 1 0 my $__REF__ = \$_[0];
1230              
1231             package Hydrogen::ArrayRef::__SANDBOX__;
1232 0 0       0 @_ == 1
1233             or Hydrogen::croak( "Wrong number of parameters for pairvalues; usage: "
1234             . "Hydrogen::ArrayRef::pairvalues( \$arrayref )" );
1235 0         0 &List::Util::pairvalues( @{$$__REF__} );
  0         0  
1236             }
1237              
1238             =head2 C<< pick_random( $arrayref, $count ) >>
1239              
1240             Additional arguments: B<< Optional[Int] >>.
1241              
1242             If no C<< $count >> is given, returns one element of the array at random. If C<< $count >> is given, creates a new array with that many random elements from the original array (or fewer if the original array is not long enough) and returns that as an arrayref or list depending on context
1243              
1244             =cut
1245              
1246             {
1247             my $__signature;
1248              
1249             sub pick_random {
1250 0     0 1 0 my $__REF__ = \$_[0];
1251              
1252             package Hydrogen::ArrayRef::__SANDBOX__;
1253             $__signature ||= sub {
1254 0     0   0 my ( %tmp, $tmp );
1255              
1256 0 0 0     0 @_ >= 1 && @_ <= 2
1257             or Hydrogen::croak(
1258             "Wrong number of parameters in signature for %s: got %d, %s",
1259             "pick_random", scalar(@_), "expected exactly 1 parameters" );
1260              
1261             # Parameter $_[0] (type: ArrayRef)
1262 0 0       0 ( ref( $_[0] ) eq 'ARRAY' )
1263             or Hydrogen::croak(
1264             "Type check failed in signature for pick_random: %s should be %s",
1265             "\$_[0]", "ArrayRef"
1266             );
1267              
1268             # Parameter $_[1] (type: Optional[Int])
1269 0 0       0 $#_ >= 1
1270             or return (@_);
1271             (
1272 0 0       0 do {
1273 0         0 my $tmp = $_[1];
1274 0 0 0     0 defined($tmp) and !ref($tmp) and $tmp =~ /\A-?[0-9]+\z/;
1275             }
1276             )
1277             or Hydrogen::croak(
1278             "Type check failed in signature for pick_random: %s should be %s",
1279             "\$_[1]", "Optional[Int]"
1280             );
1281              
1282 0         0 (@_);
1283 0   0     0 };
1284 0         0 @_ = &$__signature;
1285 0         0 my @shv_tmp = List::Util::shuffle( @{$$__REF__} );
  0         0  
1286 0         0 my $shv_count = $_[1];
1287 0 0       0 $shv_count = @{$$__REF__} if $shv_count > @{$$__REF__};
  0         0  
  0         0  
1288 0 0       0 $shv_count = @{$$__REF__} + $shv_count if $shv_count < 0;
  0         0  
1289 0 0 0     0 if ( wantarray and ( @_ - 1 ) ) { @shv_tmp[ 0 .. $shv_count - 1 ] }
  0 0       0  
1290 0         0 elsif ( ( @_ - 1 ) ) { [ @shv_tmp[ 0 .. $shv_count - 1 ] ] }
1291 0         0 else { $shv_tmp[0] }
1292             }
1293             }
1294              
1295             =head2 C<< pop( $arrayref ) >>
1296              
1297             Removes the last element from the array and returns it.
1298              
1299             =cut
1300              
1301             sub pop {
1302 2     2 1 31443 my $__REF__ = \$_[0];
1303              
1304             package Hydrogen::ArrayRef::__SANDBOX__;
1305 2 50       11 @_ == 1
1306             or Hydrogen::croak( "Wrong number of parameters for pop; usage: "
1307             . "Hydrogen::ArrayRef::pop( \$arrayref )" );
1308 2         5 1;
1309 2         4 pop( @{$$__REF__} );
  2         18  
1310             }
1311              
1312             =head2 C<< print( $arrayref, $fh?, $with? ) >>
1313              
1314             Additional arguments: B<< Optional[FileHandle] >>, B<< Optional[Str] >>.
1315              
1316             Prints a string joining all the elements in the array; if C<< $fh >> is omitted, defaults to STDOUT; if C<< $with >> is omitted, defaults to a comma.
1317              
1318             =cut
1319              
1320             {
1321             my $__signature;
1322              
1323             sub print {
1324 0     0 1 0 my $__REF__ = \$_[0];
1325              
1326             package Hydrogen::ArrayRef::__SANDBOX__;
1327             $__signature ||= sub {
1328 0     0   0 my ( %tmp, $tmp );
1329              
1330 0 0 0     0 @_ >= 1 && @_ <= 3
1331             or Hydrogen::croak(
1332             "Wrong number of parameters in signature for %s: got %d, %s",
1333             "print", scalar(@_), "expected exactly 1 parameters" );
1334              
1335             # Parameter $_[0] (type: ArrayRef)
1336 0 0       0 ( ref( $_[0] ) eq 'ARRAY' )
1337             or Hydrogen::croak(
1338             "Type check failed in signature for print: %s should be %s",
1339             "\$_[0]", "ArrayRef" );
1340              
1341             # Parameter $_[1] (type: Optional[FileHandle])
1342 0 0       0 $#_ >= 1
1343             or return (@_);
1344             (
1345 0 0       0 do {
1346              
1347             package Hydrogen::ArrayRef::__SANDBOX__;
1348 4     4   22085 use Scalar::Util ();
  4         19  
  4         12202  
1349 0 0 0     0 ( ref( $_[1] ) && Scalar::Util::openhandle( $_[1] ) )
      0        
1350             or ( Scalar::Util::blessed( $_[1] )
1351             && $_[1]->isa("IO::Handle") );
1352             }
1353             )
1354             or Hydrogen::croak(
1355             "Type check failed in signature for print: %s should be %s",
1356             "\$_[1]", "Optional[FileHandle]" );
1357              
1358             # Parameter $_[2] (type: Optional[Str])
1359 0 0       0 $#_ >= 2
1360             or return (@_);
1361 0 0       0 do {
1362              
1363             package Hydrogen::ArrayRef::__SANDBOX__;
1364 0 0       0 defined( $_[2] ) and do {
1365 0 0       0 ref( \$_[2] ) eq 'SCALAR'
1366             or ref( \( my $val = $_[2] ) ) eq 'SCALAR';
1367             }
1368             }
1369             or Hydrogen::croak(
1370             "Type check failed in signature for print: %s should be %s",
1371             "\$_[2]", "Optional[Str]" );
1372              
1373 0         0 (@_);
1374 0   0     0 };
1375 0         0 @_ = &$__signature;
1376 0 0       0 my $shv_param_with = ( ( @_ - 1 ) > 1 ) ? $_[2] : q[,];
1377 0 0       0 print { $_[1] || *STDOUT } join( $shv_param_with, @{$$__REF__} );
  0         0  
  0         0  
1378             }
1379             }
1380              
1381             =head2 C<< product( $arrayref ) >>
1382              
1383             Like C<< List::Util::product() >>.
1384              
1385             =cut
1386              
1387             sub product {
1388 0     0 1 0 my $__REF__ = \$_[0];
1389              
1390             package Hydrogen::ArrayRef::__SANDBOX__;
1391 0 0       0 @_ == 1
1392             or Hydrogen::croak( "Wrong number of parameters for product; usage: "
1393             . "Hydrogen::ArrayRef::product( \$arrayref )" );
1394 0         0 &List::Util::product( 1, @{$$__REF__} );
  0         0  
1395             }
1396              
1397             =head2 C<< push( $arrayref, @values ) >>
1398              
1399             Adds elements to the end of the array.
1400              
1401             =cut
1402              
1403             sub push {
1404 1     1 1 20026 my $__REF__ = \$_[0];
1405              
1406             package Hydrogen::ArrayRef::__SANDBOX__;
1407 1         3 1;
1408 1         2 push( @{$$__REF__}, @_[ 1 .. $#_ ] );
  1         8  
1409             }
1410              
1411             =head2 C<< reduce( $arrayref, $coderef ) >>
1412              
1413             Additional arguments: B<< CodeRef >>.
1414              
1415             Like C<< List::Util::reduce() >>.
1416              
1417             =cut
1418              
1419             sub reduce {
1420 0     0 1 0 my $__REF__ = \$_[0];
1421              
1422             package Hydrogen::ArrayRef::__SANDBOX__;
1423 0         0 @_ = do {
1424 0         0 my ( %tmp, $tmp );
1425              
1426 0 0       0 @_ == 2
1427             or Hydrogen::croak(
1428             "Wrong number of parameters in signature for %s: got %d, %s",
1429             "reduce", scalar(@_), "expected exactly 2 parameters" );
1430              
1431             # Parameter $_[0] (type: ArrayRef)
1432 0 0       0 ( ref( $_[0] ) eq 'ARRAY' )
1433             or Hydrogen::croak(
1434             "Type check failed in signature for reduce: %s should be %s",
1435             "\$_[0]", "ArrayRef" );
1436              
1437             # Parameter $_[1] (type: CodeRef)
1438 0 0       0 ( ref( $_[1] ) eq 'CODE' )
1439             or Hydrogen::croak(
1440             "Type check failed in signature for reduce: %s should be %s",
1441             "\$_[1]", "CodeRef" );
1442              
1443 0         0 (@_);
1444             };
1445 0         0 my $shv_callback = $_[1];
1446 0     0   0 List::Util::reduce { $shv_callback->( $a, $b ) } @{$$__REF__};
  0         0  
  0         0  
1447             }
1448              
1449             =head2 C<< reductions( $arrayref, $coderef ) >>
1450              
1451             Additional arguments: B<< CodeRef >>.
1452              
1453             Like C<< List::Util::reductions() >>.
1454              
1455             =cut
1456              
1457             sub reductions {
1458 0     0 1 0 my $__REF__ = \$_[0];
1459              
1460             package Hydrogen::ArrayRef::__SANDBOX__;
1461 0         0 @_ = do {
1462 0         0 my ( %tmp, $tmp );
1463              
1464 0 0       0 @_ == 2
1465             or Hydrogen::croak(
1466             "Wrong number of parameters in signature for %s: got %d, %s",
1467             "reductions", scalar(@_), "expected exactly 2 parameters" );
1468              
1469             # Parameter $_[0] (type: ArrayRef)
1470 0 0       0 ( ref( $_[0] ) eq 'ARRAY' )
1471             or Hydrogen::croak(
1472             "Type check failed in signature for reductions: %s should be %s",
1473             "\$_[0]", "ArrayRef" );
1474              
1475             # Parameter $_[1] (type: CodeRef)
1476 0 0       0 ( ref( $_[1] ) eq 'CODE' )
1477             or Hydrogen::croak(
1478             "Type check failed in signature for reductions: %s should be %s",
1479             "\$_[1]", "CodeRef" );
1480              
1481 0         0 (@_);
1482             };
1483 0         0 my $shv_callback = $_[1];
1484 0     0   0 List::Util::reductions { $shv_callback->( $a, $b ) } @{$$__REF__};
  0         0  
  0         0  
1485             }
1486              
1487             =head2 C<< reset( $arrayref ) >>
1488              
1489             Resets the original value to its default value, or an empty arrayref if it has no default.
1490              
1491             =cut
1492              
1493             sub reset {
1494 1     1 1 15039 my $__REF__ = \$_[0];
1495              
1496             package Hydrogen::ArrayRef::__SANDBOX__;
1497 1 50       7 @_ == 1
1498             or Hydrogen::croak( "Wrong number of parameters for reset; usage: "
1499             . "Hydrogen::ArrayRef::reset( \$arrayref )" );
1500             (
1501 1         5 @{ $_[0] } = @{
1502 1         2 +do {
  1         2  
1503 1         3 my $shv_final_unchecked = [];
1504 1         2 do {
1505 1 50       5 ( ref($shv_final_unchecked) eq 'ARRAY' )
1506             or Hydrogen::croak(
1507             "Type check failed for reset: expected %s, got value %s",
1508             "ArrayRef", $shv_final_unchecked
1509             );
1510 1         3 $shv_final_unchecked;
1511             };
1512             }
1513             }
1514             );
1515             }
1516              
1517             =head2 C<< reverse( $arrayref ) >>
1518              
1519             Returns the reversed array in list context.
1520              
1521             =cut
1522              
1523             sub reverse {
1524 0     0 1 0 my $__REF__ = \$_[0];
1525              
1526             package Hydrogen::ArrayRef::__SANDBOX__;
1527 0 0       0 @_ == 1
1528             or Hydrogen::croak( "Wrong number of parameters for reverse; usage: "
1529             . "Hydrogen::ArrayRef::reverse( \$arrayref )" );
1530 0         0 reverse @{$$__REF__};
  0         0  
1531             }
1532              
1533             =head2 C<< sample( $arrayref, $count ) >>
1534              
1535             Additional arguments: B<< Int >>.
1536              
1537             Like C<< List::Util::sample() >>.
1538              
1539             =cut
1540              
1541             sub sample {
1542 0     0 1 0 my $__REF__ = \$_[0];
1543              
1544             package Hydrogen::ArrayRef::__SANDBOX__;
1545 0         0 @_ = do {
1546 0         0 my ( %tmp, $tmp );
1547              
1548 0 0       0 @_ == 2
1549             or Hydrogen::croak(
1550             "Wrong number of parameters in signature for %s: got %d, %s",
1551             "sample", scalar(@_), "expected exactly 2 parameters" );
1552              
1553             # Parameter $_[0] (type: ArrayRef)
1554 0 0       0 ( ref( $_[0] ) eq 'ARRAY' )
1555             or Hydrogen::croak(
1556             "Type check failed in signature for sample: %s should be %s",
1557             "\$_[0]", "ArrayRef" );
1558              
1559             # Parameter $_[1] (type: Int)
1560             (
1561 0 0       0 do {
1562 0         0 my $tmp = $_[1];
1563 0 0 0     0 defined($tmp) and !ref($tmp) and $tmp =~ /\A-?[0-9]+\z/;
1564             }
1565             )
1566             or Hydrogen::croak(
1567             "Type check failed in signature for sample: %s should be %s",
1568             "\$_[1]", "Int" );
1569              
1570 0         0 (@_);
1571             };
1572 0         0 &List::Util::sample( $_[1], @{$$__REF__} );
  0         0  
1573             }
1574              
1575             =head2 C<< set( $arrayref, $index, $value ) >>
1576              
1577             Additional arguments: B<< Int >>, B<< Any >>.
1578              
1579             Sets the element with the given index to the supplied value.
1580              
1581             =cut
1582              
1583             sub set {
1584 1     1 1 23971 my $__REF__ = \$_[0];
1585              
1586             package Hydrogen::ArrayRef::__SANDBOX__;
1587 1         4 @_ = do {
1588 1         3 my ( %tmp, $tmp );
1589              
1590 1 50       8 @_ == 3
1591             or Hydrogen::croak(
1592             "Wrong number of parameters in signature for %s: got %d, %s",
1593             "set", scalar(@_), "expected exactly 3 parameters" );
1594              
1595             # Parameter $_[0] (type: ArrayRef)
1596 1 50       5 ( ref( $_[0] ) eq 'ARRAY' )
1597             or Hydrogen::croak(
1598             "Type check failed in signature for set: %s should be %s",
1599             "\$_[0]", "ArrayRef" );
1600              
1601             # Parameter $_[1] (type: Int)
1602             (
1603 1 50       2 do {
1604 1         3 my $tmp = $_[1];
1605 1 50 33     21 defined($tmp) and !ref($tmp) and $tmp =~ /\A-?[0-9]+\z/;
1606             }
1607             )
1608             or Hydrogen::croak(
1609             "Type check failed in signature for set: %s should be %s",
1610             "\$_[1]", "Int" );
1611              
1612             # Parameter $_[2] (type: Any)
1613 1         3 1; # ... nothing to do
1614              
1615 1         5 (@_);
1616             };
1617 1         2 1;
1618 1         6 ($$__REF__)->[ $_[1] ] = $_[2];
1619             }
1620              
1621             =head2 C<< shallow_clone( $arrayref ) >>
1622              
1623             Creates a new arrayref with the same elements as the original.
1624              
1625             =cut
1626              
1627             sub shallow_clone {
1628 0     0 1 0 my $__REF__ = \$_[0];
1629              
1630             package Hydrogen::ArrayRef::__SANDBOX__;
1631 0 0       0 @_ == 1
1632             or
1633             Hydrogen::croak( "Wrong number of parameters for shallow_clone; usage: "
1634             . "Hydrogen::ArrayRef::shallow_clone( \$arrayref )" );
1635 0         0 [ @{$$__REF__} ];
  0         0  
1636             }
1637              
1638             =head2 C<< shift( $arrayref ) >>
1639              
1640             Removes an element from the start of the array and returns it.
1641              
1642             =cut
1643              
1644             sub shift {
1645 2     2 1 14002 my $__REF__ = \$_[0];
1646              
1647             package Hydrogen::ArrayRef::__SANDBOX__;
1648 2 50       9 @_ == 1
1649             or Hydrogen::croak( "Wrong number of parameters for shift; usage: "
1650             . "Hydrogen::ArrayRef::shift( \$arrayref )" );
1651 2         3 1;
1652 2         4 shift( @{$$__REF__} );
  2         11  
1653             }
1654              
1655             =head2 C<< shuffle( $arrayref ) >>
1656              
1657             Returns the array in a random order; can be called in list context or scalar context and will return an arrayref in the latter case.
1658              
1659             =cut
1660              
1661             sub shuffle {
1662 0     0 1 0 my $__REF__ = \$_[0];
1663              
1664             package Hydrogen::ArrayRef::__SANDBOX__;
1665 0 0       0 @_ == 1
1666             or Hydrogen::croak( "Wrong number of parameters for shuffle; usage: "
1667             . "Hydrogen::ArrayRef::shuffle( \$arrayref )" );
1668 0         0 my @shv_return = List::Util::shuffle( @{$$__REF__} );
  0         0  
1669 0 0       0 wantarray ? @shv_return : \@shv_return;
1670             }
1671              
1672             =head2 C<< shuffle_in_place( $arrayref ) >>
1673              
1674             Rearranges the array in a random order, and changes the original value to point to the new order.
1675              
1676             =cut
1677              
1678             sub shuffle_in_place {
1679 0     0 1 0 my $__REF__ = \$_[0];
1680              
1681             package Hydrogen::ArrayRef::__SANDBOX__;
1682 0 0       0 @_ == 1
1683             or Hydrogen::croak(
1684             "Wrong number of parameters for shuffle_in_place; usage: "
1685             . "Hydrogen::ArrayRef::shuffle_in_place( \$arrayref )" );
1686 0         0 1;
1687 0         0 my @shv_return = List::Util::shuffle( @{$$__REF__} );
  0         0  
1688 0         0 ( @{ $_[0] } = @{ +\@shv_return } );
  0         0  
  0         0  
1689             }
1690              
1691             =head2 C<< sort( $arrayref, $coderef? ) >>
1692              
1693             Additional arguments: B<< Optional[CodeRef] >>.
1694              
1695             Like C from L.
1696              
1697             =cut
1698              
1699             {
1700             my $__signature;
1701              
1702             sub sort {
1703 0     0 1 0 my $__REF__ = \$_[0];
1704              
1705             package Hydrogen::ArrayRef::__SANDBOX__;
1706             $__signature ||= sub {
1707 0     0   0 my ( %tmp, $tmp );
1708              
1709 0 0 0     0 @_ >= 1 && @_ <= 2
1710             or Hydrogen::croak(
1711             "Wrong number of parameters in signature for %s: got %d, %s",
1712             "sort", scalar(@_), "expected exactly 1 parameters" );
1713              
1714             # Parameter $_[0] (type: ArrayRef)
1715 0 0       0 ( ref( $_[0] ) eq 'ARRAY' )
1716             or Hydrogen::croak(
1717             "Type check failed in signature for sort: %s should be %s",
1718             "\$_[0]", "ArrayRef" );
1719              
1720             # Parameter $_[1] (type: Optional[CodeRef])
1721 0 0       0 $#_ >= 1
1722             or return (@_);
1723 0 0       0 ( ref( $_[1] ) eq 'CODE' )
1724             or Hydrogen::croak(
1725             "Type check failed in signature for sort: %s should be %s",
1726             "\$_[1]", "Optional[CodeRef]" );
1727              
1728 0         0 (@_);
1729 0   0     0 };
1730 0         0 @_ = &$__signature;
1731             my @shv_return =
1732             $_[1]
1733 0         0 ? ( sort { $_[1]->( $a, $b ) } @{$$__REF__} )
  0         0  
1734 0 0       0 : ( sort @{$$__REF__} );
  0         0  
1735             }
1736             }
1737              
1738             =head2 C<< sort_in_place( $arrayref, $coderef? ) >>
1739              
1740             Additional arguments: B<< Optional[CodeRef] >>.
1741              
1742             Like C from L, but changes the original value to point to the newly sorted array.
1743              
1744             =cut
1745              
1746             {
1747             my $__signature;
1748              
1749             sub sort_in_place {
1750 0     0 1 0 my $__REF__ = \$_[0];
1751              
1752             package Hydrogen::ArrayRef::__SANDBOX__;
1753             $__signature ||= sub {
1754 0     0   0 my ( %tmp, $tmp );
1755              
1756 0 0 0     0 @_ >= 1 && @_ <= 2
1757             or Hydrogen::croak(
1758             "Wrong number of parameters in signature for %s: got %d, %s",
1759             "sort_in_place", scalar(@_), "expected exactly 1 parameters" );
1760              
1761             # Parameter $_[0] (type: ArrayRef)
1762 0 0       0 ( ref( $_[0] ) eq 'ARRAY' )
1763             or Hydrogen::croak(
1764             "Type check failed in signature for sort_in_place: %s should be %s",
1765             "\$_[0]", "ArrayRef"
1766             );
1767              
1768             # Parameter $_[1] (type: Optional[CodeRef])
1769 0 0       0 $#_ >= 1
1770             or return (@_);
1771 0 0       0 ( ref( $_[1] ) eq 'CODE' )
1772             or Hydrogen::croak(
1773             "Type check failed in signature for sort_in_place: %s should be %s",
1774             "\$_[1]", "Optional[CodeRef]"
1775             );
1776              
1777 0         0 (@_);
1778 0   0     0 };
1779 0         0 @_ = &$__signature;
1780 0         0 1;
1781             my @shv_return =
1782             $_[1]
1783 0         0 ? ( sort { $_[1]->( $a, $b ) } @{$$__REF__} )
  0         0  
1784 0 0       0 : ( sort @{$$__REF__} );
  0         0  
1785 0         0 ( @{ $_[0] } = @{ +\@shv_return } );
  0         0  
  0         0  
1786             }
1787             }
1788              
1789             =head2 C<< splice( $arrayref, $index, $length, @values ) >>
1790              
1791             Like C from L.
1792              
1793             =cut
1794              
1795             sub splice {
1796 0     0 1 0 my $__REF__ = \$_[0];
1797              
1798             package Hydrogen::ArrayRef::__SANDBOX__;
1799 0 0       0 @_ >= 2
1800             or Hydrogen::croak( "Wrong number of parameters for splice; usage: "
1801             . "Hydrogen::ArrayRef::splice( \$arrayref, \$index, \$length, \@values )"
1802             );
1803 0 0       0 if ( ( @_ - 1 ) >= 1 ) {
1804 0         0 do {
1805             (
1806 0 0       0 do {
1807 0         0 my $tmp = $_[1];
1808 0 0 0     0 defined($tmp) and !ref($tmp) and $tmp =~ /\A-?[0-9]+\z/;
1809             }
1810             )
1811             or Hydrogen::croak(
1812             "Type check failed for splice: expected %s, got value %s",
1813             "Int", $_[1] );
1814 0         0 $_[1];
1815             };
1816             }
1817             ;
1818 0 0       0 if ( ( @_ - 1 ) >= 2 ) {
1819 0         0 do {
1820             (
1821 0 0       0 do {
1822 0         0 my $tmp = $_[2];
1823 0 0 0     0 defined($tmp) and !ref($tmp) and $tmp =~ /\A-?[0-9]+\z/;
1824             }
1825             )
1826             or Hydrogen::croak(
1827             "Type check failed for splice: expected %s, got value %s",
1828             "Int", $_[2] );
1829 0         0 $_[2];
1830             };
1831             }
1832 0         0 my ( $shv_index, $shv_length, @shv_values ) = @_[ 1 .. $#_ ];
1833 0         0 splice( @{$$__REF__}, $shv_index, $shv_length, @shv_values );
  0         0  
1834             }
1835              
1836             =head2 C<< sum( $arrayref ) >>
1837              
1838             Like C<< List::Util::sum0() >>.
1839              
1840             =cut
1841              
1842             sub sum {
1843 0     0 1 0 my $__REF__ = \$_[0];
1844              
1845             package Hydrogen::ArrayRef::__SANDBOX__;
1846 0 0       0 @_ == 1
1847             or Hydrogen::croak( "Wrong number of parameters for sum; usage: "
1848             . "Hydrogen::ArrayRef::sum( \$arrayref )" );
1849 0         0 &List::Util::sum( 0, @{$$__REF__} );
  0         0  
1850             }
1851              
1852             =head2 C<< tail( $arrayref, $count ) >>
1853              
1854             Additional arguments: B<< Int >>.
1855              
1856             Returns the last C<< $count >> elements of the array in list context.
1857              
1858             =cut
1859              
1860             sub tail {
1861 0     0 1 0 my $__REF__ = \$_[0];
1862              
1863             package Hydrogen::ArrayRef::__SANDBOX__;
1864 0         0 @_ = do {
1865 0         0 my ( %tmp, $tmp );
1866              
1867 0 0       0 @_ == 2
1868             or Hydrogen::croak(
1869             "Wrong number of parameters in signature for %s: got %d, %s",
1870             "tail", scalar(@_), "expected exactly 2 parameters" );
1871              
1872             # Parameter $_[0] (type: ArrayRef)
1873 0 0       0 ( ref( $_[0] ) eq 'ARRAY' )
1874             or Hydrogen::croak(
1875             "Type check failed in signature for tail: %s should be %s",
1876             "\$_[0]", "ArrayRef" );
1877              
1878             # Parameter $_[1] (type: Int)
1879             (
1880 0 0       0 do {
1881 0         0 my $tmp = $_[1];
1882 0 0 0     0 defined($tmp) and !ref($tmp) and $tmp =~ /\A-?[0-9]+\z/;
1883             }
1884             )
1885             or Hydrogen::croak(
1886             "Type check failed in signature for tail: %s should be %s",
1887             "\$_[1]", "Int" );
1888              
1889 0         0 (@_);
1890             };
1891 0         0 my $shv_count = $_[1];
1892 0 0       0 $shv_count = @{$$__REF__} if $shv_count > @{$$__REF__};
  0         0  
  0         0  
1893 0 0       0 $shv_count = @{$$__REF__} + $shv_count if $shv_count < 0;
  0         0  
1894 0         0 my $shv_start = scalar( @{$$__REF__} ) - $shv_count;
  0         0  
1895 0         0 my $shv_end = scalar( @{$$__REF__} ) - 1;
  0         0  
1896 0         0 ( @{$$__REF__} )[ $shv_start .. $shv_end ];
  0         0  
1897             }
1898              
1899             =head2 C<< uniq( $arrayref ) >>
1900              
1901             Returns the array filtered to remove duplicates; can be called in list context or scalar context and will return an arrayref in the latter case.
1902              
1903             =cut
1904              
1905             sub uniq {
1906 0     0 1 0 my $__REF__ = \$_[0];
1907              
1908             package Hydrogen::ArrayRef::__SANDBOX__;
1909 0 0       0 @_ == 1
1910             or Hydrogen::croak( "Wrong number of parameters for uniq; usage: "
1911             . "Hydrogen::ArrayRef::uniq( \$arrayref )" );
1912 0         0 my @shv_return = List::Util::uniq( @{$$__REF__} );
  0         0  
1913 0 0       0 wantarray ? @shv_return : \@shv_return;
1914             }
1915              
1916             =head2 C<< uniq_in_place( $arrayref ) >>
1917              
1918             Filters the array to remove duplicates, and changes the original value to point to the filtered array.
1919              
1920             =cut
1921              
1922             sub uniq_in_place {
1923 0     0 1 0 my $__REF__ = \$_[0];
1924              
1925             package Hydrogen::ArrayRef::__SANDBOX__;
1926 0 0       0 @_ == 1
1927             or
1928             Hydrogen::croak( "Wrong number of parameters for uniq_in_place; usage: "
1929             . "Hydrogen::ArrayRef::uniq_in_place( \$arrayref )" );
1930 0         0 1;
1931 0         0 my @shv_return = List::Util::uniq( @{$$__REF__} );
  0         0  
1932 0         0 ( @{ $_[0] } = @{ +\@shv_return } );
  0         0  
  0         0  
1933             }
1934              
1935             =head2 C<< uniqnum( $arrayref ) >>
1936              
1937             Returns the array filtered to remove duplicates numerically; can be called in list context or scalar context and will return an arrayref in the latter case.
1938              
1939             =cut
1940              
1941             sub uniqnum {
1942 0     0 1 0 my $__REF__ = \$_[0];
1943              
1944             package Hydrogen::ArrayRef::__SANDBOX__;
1945 0 0       0 @_ == 1
1946             or Hydrogen::croak( "Wrong number of parameters for uniqnum; usage: "
1947             . "Hydrogen::ArrayRef::uniqnum( \$arrayref )" );
1948 0         0 my @shv_return = List::Util::uniqnum( @{$$__REF__} );
  0         0  
1949 0 0       0 wantarray ? @shv_return : \@shv_return;
1950             }
1951              
1952             =head2 C<< uniqnum_in_place( $arrayref ) >>
1953              
1954             Filters the array to remove duplicates numerically, and changes the original value to point to the filtered array.
1955              
1956             =cut
1957              
1958             sub uniqnum_in_place {
1959 0     0 1 0 my $__REF__ = \$_[0];
1960              
1961             package Hydrogen::ArrayRef::__SANDBOX__;
1962 0 0       0 @_ == 1
1963             or Hydrogen::croak(
1964             "Wrong number of parameters for uniqnum_in_place; usage: "
1965             . "Hydrogen::ArrayRef::uniqnum_in_place( \$arrayref )" );
1966 0         0 1;
1967 0         0 my @shv_return = List::Util::uniqnum( @{$$__REF__} );
  0         0  
1968 0         0 ( @{ $_[0] } = @{ +\@shv_return } );
  0         0  
  0         0  
1969             }
1970              
1971             =head2 C<< uniqstr( $arrayref ) >>
1972              
1973             Returns the array filtered to remove duplicates stringwise; can be called in list context or scalar context and will return an arrayref in the latter case.
1974              
1975             =cut
1976              
1977             sub uniqstr {
1978 0     0 1 0 my $__REF__ = \$_[0];
1979              
1980             package Hydrogen::ArrayRef::__SANDBOX__;
1981 0 0       0 @_ == 1
1982             or Hydrogen::croak( "Wrong number of parameters for uniqstr; usage: "
1983             . "Hydrogen::ArrayRef::uniqstr( \$arrayref )" );
1984 0         0 my @shv_return = List::Util::uniqstr( @{$$__REF__} );
  0         0  
1985 0 0       0 wantarray ? @shv_return : \@shv_return;
1986             }
1987              
1988             =head2 C<< uniqstr_in_place( $arrayref ) >>
1989              
1990             Filters the array to remove duplicates stringwise, and changes the original value to point to the filtered array.
1991              
1992             =cut
1993              
1994             sub uniqstr_in_place {
1995 0     0 1 0 my $__REF__ = \$_[0];
1996              
1997             package Hydrogen::ArrayRef::__SANDBOX__;
1998 0 0       0 @_ == 1
1999             or Hydrogen::croak(
2000             "Wrong number of parameters for uniqstr_in_place; usage: "
2001             . "Hydrogen::ArrayRef::uniqstr_in_place( \$arrayref )" );
2002 0         0 1;
2003 0         0 my @shv_return = List::Util::uniqstr( @{$$__REF__} );
  0         0  
2004 0         0 ( @{ $_[0] } = @{ +\@shv_return } );
  0         0  
  0         0  
2005             }
2006              
2007             =head2 C<< unshift( $arrayref, @values ) >>
2008              
2009             Adds an element to the start of the array.
2010              
2011             =cut
2012              
2013             sub unshift {
2014 1     1 1 44782 my $__REF__ = \$_[0];
2015              
2016             package Hydrogen::ArrayRef::__SANDBOX__;
2017 1         2 1;
2018 1         3 unshift( @{$$__REF__}, @_[ 1 .. $#_ ] );
  1         8  
2019             }
2020              
2021             1;
2022              
2023             =head1 EXPORT
2024              
2025             No functions are exported by this module by default. To import them all (this is usually a bad idea), use:
2026              
2027             use Hydrogen::ArrayRef -all;
2028              
2029             To import a particular function, use:
2030              
2031             use Hydrogen::ArrayRef 'all_true';
2032              
2033             To rename functions:
2034              
2035             use Hydrogen::ArrayRef 'all_true' => { -as => 'myfunc' };
2036              
2037             On Perl 5.37.2+ (or if L is installed) you can import lexically:
2038              
2039             use Hydrogen::ArrayRef -lexical, 'all_true';
2040              
2041             See L for more hints on importing.
2042              
2043             =head1 BUGS
2044              
2045             Please report any bugs to
2046             L.
2047              
2048             =head1 SEE ALSO
2049              
2050             L,
2051             L,
2052             L,
2053             L,
2054             L,
2055             L,
2056             L.
2057              
2058             =head1 AUTHOR
2059              
2060             Toby Inkster Etobyink@cpan.orgE.
2061              
2062             =head1 COPYRIGHT AND LICENCE
2063              
2064             This software is copyright (c) 2022-2025 by Toby Inkster.
2065              
2066             This is free software; you can redistribute it and/or modify it under
2067             the same terms as the Perl 5 programming language system itself.
2068              
2069             =head1 DISCLAIMER OF WARRANTIES
2070              
2071             THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
2072             WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
2073             MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
2074