summaryrefslogtreecommitdiffstats
path: root/TOOLS/lib/Parse/Matroska/Utils.pm
blob: 127d626cb129adc12b363ce0bc62d5698f4528ff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use strict;
use warnings;

# ABSTRACT: internally-used helper functions
package Parse::Matroska::Utils;

use Exporter;
our @ISA       = qw{Exporter};
our @EXPORT_OK = qw{uniq uncamelize};

=method uniq(@array)

The same as L<List::MoreUtils/"uniq LIST">.
Included to avoid depending on it since it's
not a core module.

=cut
sub uniq(@) {
  my %seen;
  return grep { !$seen{$_}++ } @_;
}

=method uncamelize($string)

Converts a "StringLikeTHIS" into a
"string_like_this".

=cut
sub uncamelize($) {
    local $_ = shift;
    # lc followed by UC: lc_UC
    s/(?<=[a-z])([A-Z])/_\L$1/g;
    # UC followed by two lc: _UClclc
    s/([A-Z])(?=[a-z]{2})/_\L$1/g;
    # strip leading _ that the second regexp might add; lowercase all
    s/^_//; lc
}