in reply to Counting characters without a space

htmanning:

You can certainly do that, though it might be a bit of work. One way you could do it would be something like breaking the string into an array of strings on blanks. Then, for each string in the array that happens to be over 15 characters, you could split on the first comma. Finally, rejoining the array back into a string. Should be something (untested!) like this:

my $reformatted = join(' ', map { length($_) < 16 ? $_ : split /,/,$_,2 } split /\s+/, $original);

I don't particularly like that, though. If I was willing to reformat the users string, I'd just do something like:

$original =~ s/,\s+/, /g;

The code is simple, and it simply ensures that all commas are followed by a space.

...roboticus

When your only tool is a hammer, all problems look like your thumb.

Replies are listed 'Best First'.
Re^2: Counting characters without a space
by htmanning (Friar) on Jul 22, 2018 at 05:56 UTC
    Thanks! This should work even though I don't know what the "s+" does.

    <code> $original =~ s/,\s+/, /g; </code.

    I was considering the above without the s+.

    What is happening is they are putting in numbers like this: 1234,4325,5456,6544,4345,5443,3455,4321. Your suggestion should work.

      I don't know what the "s+" does.

      It isn't "s+" but rather "\s+" - a small but very important distinction. \s is a character class which includes all whitespace (spaces, tabs, newlines). The + metacharacter matches one or more of the preceding item so this combination matches one or more consecutive whitespaces. See perlre or the Monastery's own tutorials for more on regular expressions.