Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

## ----------------------------------------------------------------------------
# String::CamelCase
# -----------------------------------------------------------------------------
# Mastering programmed by YAMASHINA Hio
#
# Copyright 2006 YAMASHINA Hio
# -----------------------------------------------------------------------------
# $Id$
# -----------------------------------------------------------------------------
use strict;
our $VERSION = '0.04';
use base qw(Exporter);
our @EXPORT_OK = qw(camelize decamelize wordsplit);
1;
sub wordsplit
{
my $s = shift;
split( /[_\s]+|\b|(?<![A-Z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])/, $s );
}
sub camelize
{
my $s = shift;
join('', map{ ucfirst $_ } split(/(?<=[A-Za-z])_(?=[A-Za-z])|\b/, $s));
}
sub decamelize
{
my $s = shift;
$s =~ s{([^a-zA-Z]?)([A-Z]*)([A-Z])([a-z]?)}{
my $fc = pos($s)==0;
my ($p0,$p1,$p2,$p3) = ($1,lc$2,lc$3,$4);
my $t = $p0 || $fc ? $p0 : '_';
$t .= $p3 ? $p1 ? "${p1}_$p2$p3" : "$p2$p3" : "$p1$p2";
$t;
}ge;
$s;
}
__END__
=head1 NAME
String::CamelCase - camelcase, de-camelcase
=head1 VERSION
Version 0.03
=head1 SYNOPSIS
use String::CamelCase qw(camelize decamelize wordsplit);
print camelize("some_keyword"); # ==> SomeKeyword
print decamelize("SomeKeyword"); # ==> some_keyword
print wordsplit("some_keyword"); # ==> (some, keyword)
print wordsplit("SomeKeyword"); # ==> (Some, Keyword)
=head1 EXPORT
This module can export two functions, C<camelize> and C<decamelize>.
=head1 FUNCTIONS
=head2 camelize($under_score)
convert from under_score text to CamelCase one.
=head2 decamelize($CamelCase)
convert from CamelCase text to under_score one.
=head2 wordsplit($str)
=head1 AUTHOR
YAMASHINA Hio, C<< <hio at cpan.org> >>
=head1 BUGS
Please report any bugs or feature requests to
C<bug-string-camelcase at rt.cpan.org>, or through the web interface at
I will be notified, and then you'll automatically be notified of progress on
your bug as I make changes.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc String::CamelCase
You can also look for information at:
=over 4
=item * AnnoCPAN: Annotated CPAN documentation
=item * CPAN Ratings
=item * RT: CPAN's request tracker
=item * Search CPAN
=back
=head1 SEE ALSO
CamelCase(en.wikipedia.org) L<http://en.wikipedia.org/wiki/CamelCase>
=head1 COPYRIGHT & LICENSE
Copyright 2006 YAMASHINA Hio, all rights reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
=cut
# -----------------------------------------------------------------------------
# End of File.
# -----------------------------------------------------------------------------