The character "-" is treated specially and therefore "\-" is treated
+as a literal "-".
The - indicates a range.
if($data !~ /^[\ \-\~\007\012\015\035\036\037]*$/) {
$data =~ tr/[\ \-\~\007\012\015\035\036\037]/ /cs;
}
is probably what you need. | [reply] [d/l] [select] |
One small point:
In the tr operator, the [ and ] characters have no special meaning. (In a 'normal' regex, they define a character set.) In the expressison (as taken from the OP)
$data =~ tr/[\ -\~\007\012\015\035\036\037]/ /cs;
the [ and ] characters simply represent themselves. This has no effect in this particular case, however, since these characters are also included in the range \ -\~ that includes, IIRC, all printable ASCII characters. (I think a space qualifies as a 'printable' character.)
| [reply] [d/l] [select] |
Thanks. Given the rest of the code (not shown), actually the range makes a lot more sense. It might not be 'correct', but I at least understand what's going on now. :)
| [reply] |