in reply to catching newlines from textarea input

You simply forgot to return $txt. A sub returns the result of the last statement by default, in your case this is the substitution. Try this instead:
#!/usr/local/bin/perl -w use strict; my $txt="This is a line\nThis is a line as well\n\nThis is the last li +ne\n"; print ubb_txt($txt); sub ubb_txt { my $txt = shift; return "" unless ( defined $txt); my ($nl)=$txt =~ m{(\cM?\cJ)}; $txt =~ s{$nl$nl}{</p><p>}gs if (defined $nl); $txt =~ s{$nl}{<br>}gs if (defined $nl); return $txt; } __END__ This is a line<br>This is a line as well</p><p>This is the last line<b +r>
Your sub was returning the number of substitutions made (i.e. the result of the last substitution).