fork download
  1. #!/usr/bin/perl
  2.  
  3. # Idiom #312 List equality
  4.  
  5. use v5.10;
  6. use strict;
  7.  
  8. say "\n==== Using native perl - flat numeric lists only ====\n";
  9.  
  10. my @a = ( 1, 2, 3, 4, 5 );
  11. my @b = ( 1, 2, 3, 4, 5, 6 );
  12. my @c = ( 1, 2, 3, 4 );
  13. my @d = ( 'a' .. 'e' );
  14. my @e = ( 1, 002, 3, 4, 5 ); # 002 is 2 in octal
  15. my @f = ( 1, 2, 7, 4, 5 );
  16.  
  17. sub lcomp {
  18. my ($a, $b) = @_;
  19.  
  20. # *E* length different
  21. return 0 if ( @$a != @$b );
  22.  
  23. my $matched = 1;
  24. for (my $i=0; $i < @$a; $i++) {
  25. return 0 unless $a->[$i] == $b->[$i];
  26. }
  27.  
  28. return 1;
  29. }
  30.  
  31. sub pp { return shift ? 'matched' : 'not matched' }
  32.  
  33. say 'lcomp( \@a, \@a ) : ', pp lcomp( \@a, \@a );
  34. say 'lcomp( \@a, \@f ) : ', pp lcomp( \@a, \@f );
  35. say 'lcomp( \@a, \@c ) : ', pp lcomp( \@a, \@c );
  36. say 'lcomp( \@a, \@e ) : ', pp lcomp( \@a, \@e );
  37. say 'lcomp( \@d, \@d ) : ', pp lcomp( \@d, \@d );
  38. say 'lcomp( [1], [1] ) : ', pp lcomp( [1], [1] );
  39. say "** the following didn't match due to (unreported) errors";
  40. say 'lcomp( @a, @a ) : ', "dies because arguments aren't validated as array refs";
  41. say 'lcomp( \@a, \@b ) : ', pp lcomp( \@a, \@b );
  42. say 'lcomp( \@a, \@d ) : ', pp lcomp( \@a, \@d );
  43. say 'lcomp( [[1]], [[1]] ) : ', pp lcomp( [[1]], [[1]] );
  44.  
Success #stdin #stdout 0.01s 5544KB
stdin
Standard input is empty
stdout
==== Using native perl - flat numeric lists only ====

lcomp( \@a, \@a )     : matched
lcomp( \@a, \@f )     : not matched
lcomp( \@a, \@c )     : not matched
lcomp( \@a, \@e )     : matched
lcomp( \@d, \@d )     : matched
lcomp( [1], [1] )     : matched
** the following didn't match due to (unreported) errors
lcomp(  @a,  @a )     : dies because arguments aren't validated as array refs
lcomp( \@a, \@b )     : not matched
lcomp( \@a, \@d )     : not matched
lcomp( [[1]], [[1]] ) : not matched