katador_amf has asked for the wisdom of the Perl Monks concerning the following question:

Hi!!!

I'm reviewing some old code and found this:

$TXT =~ s/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f\|]+/<c>/g;
I know that the \x00-\x08 is to get some caracter control but what means <c> is some code???

Thanks for your help!

Replies are listed 'Best First'.
Re: what means this <c> ???
by Fletch (Bishop) on Nov 12, 2020 at 19:17 UTC

    Unrelated but you need to use "<code></code>" tags (or, ironically, you may use "<c></c>" instead) to delimit your sample code otherwise things get treated as markup. I believe you meant: $TXT =~ s/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]+/<c>/g;

    In that context (the substitution side of an s/// statement) it means the literal string "<c>" (less than '<', a 'c', and greater than '>'). Probably (looking at the regex side) someone was using it to mark control characters in the input.

    $ perl -E '$TXT = qq{\cD\cAFoo\x1e};$TXT =~ s/[\x00-\x08\x0b\x0c\x0e-\ +x1f\x7f]+/<c>/g;say $TXT' <c>Foo<c>

    Edit: Rather than trying to do something like this yourself if you're on some flavour of *NIX the od utility can be useful for producing an annotated dump translating non-printable ASCII to standard names (I like od -xa output myself).

    The cake is a lie.
    The cake is a lie.
    The cake is a lie.