Can do without a regex as well
my %repl = (c => 'center', l => 'left', r => 'right');
$tmp = join ' ', map { $repl{$_} } split '', $tmp;
The split with the pattern '' breaks a string into a list of its characters, and map uses the hash to replace each by its full word. The output list of map is joined by space.
Updated to comments
If the original string contains yet other characters, can filter them out first
$tmp = join ' ', map { $repl{$_} } grep { /c|l|r/ } split '', $tmp;
or, use an empty list in the map for anything that isn't defined in the hash
$tmp = join ' ', map { $repl{$_} // () } split '', $tmp;
This removes altogether everything other than c|l|r. To keep them in the result
$tmp = join ' ', map { $repl{$_} // $_ } split '', $tmp;
which has them separated by space as well. To keep them together need to tweak it further.
$tmp =~ s/\s*$//g;