<?xml version="1.0" encoding="windows-1252"?>
<node id="158798" title="Re: a task for a regular expression expert" created="2002-04-13 13:23:26" updated="2005-07-22 13:02:47">
<type id="11">
note</type>
<author id="2329">
stephen</author>
<data>
<field name="doctext">
&lt;P&gt;Regular expressions are the vice-grips in the Perl programmer's toolbox. They're important tools. They're useful for just about everything. And overusing them can get you into sticky situations.&lt;/P&gt;
&lt;P&gt;Here's code to transform 'artist_name-title_with_other(chars)' into 'Artist Name - Title With Other Chars'. 
&lt;CODE&gt;
my $song = q{xecutioners-you_cant_scratch_(skit)};

# Split up artist and title of song
my ($artist, $title) = split(/-/, $song, 2);

# Turn the artist and title into human text, then stick
# them back together with ' - '.
my $new_song = humanize_text($artist) . ' - ' . humanize_text($title);

print $new_song, "\n";

# Runs a piping operation. From back to front, here's what
# happens:
#   1. We split 'something_like(this)' into 'something',
#      'like', 'this'
#   2. We capitalize the first letter of every word
#   3. We stick the list back together delimited with spaces
sub humanize_text {
    return join(' ', map(ucfirst($_), split(/[^a-zA-Z]+/, $_[0])) );
}
&lt;/CODE&gt;

 
&lt;P&gt;
stephen
&lt;/P&gt;</field>
<field name="root_node">
158793</field>
<field name="parent_node">
158793</field>
</data>
</node>
