File Coverage

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