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

Howdie Folks

#!/usr/bin/perl -w use strict; my $compressed = q#100692222~GBP~ACTIVE~0~1~<additionalinfo>The Horses + Are\:<br><br>1. Arakan Trail<br>2. Banyan Tree<br>3. Luddenmore<br>4 +. Maverick Man<br>5. Stunning View<br>6. The Bay Bandit<br>7. Tramps +Like Us<br>8. Zayaan<br>~true~5.0~1248714022799~~N:2521889~1~4.0~1.2~ +~~false~~~~|5.0~4.77~L~1~1.4~15.34~L~2~1.01~8682.94~L~3~|:2521890~2~0 +.0~~~~false~~~~|1.24~17.34~L~1~1.23~2.5~L~2~1.21~2.6~L~3~|:2521892~3~ +0.0~~~~false~~~~|1.24~17.34~L~1~1.23~2.5~L~2~1.21~2.6~L~3~|:2521895~4 +~0.0~~~~false~~~~|5.0~2.16~L~1~1.4~17.34~L~2~1.01~8682.94~L~3~|:25218 +99~5~0.0~~~~false~~~~|1.24~17.34~L~1~1.23~2.5~L~2~1.21~2.6~L~3~|:2521 +904~6~0.0~~~~false~~~~|1.24~17.34~L~1~1.23~2.5~L~2~1.21~2.6~L~3~|:252 +1913~7~0.0~~~~false~~~~|1.24~17.34~L~1~1.23~2.5~L~2~1.21~2.6~L~3~|:25 +21891~8~0.0~~~~false~~~~|1.21~2.6~L~1~1.2~17.34~L~2~1.01~8682.94~L~3~ +|:2521893~9~0.0~~~~false~~~~|1.2~17.34~L~1~1.01~8682.94~L~2~|:2521896 +~10~0.0~~~~false~~~~|1.7~20.0~L~1~1.4~17.34~L~2~1.01~8682.94~L~3~|:25 +21900~11~0.0~~~~false~~~~|1.23~2.5~L~1~1.22~17.34~L~2~1.21~2.6~L~3~|: +2521905~12~0.0~~~~false~~~~|1.21~2.6~L~1~1.2~17.34~L~2~1.01~8682.94~L +~3~|:2521914~13~0.0~~~~false~~~~|1.2~17.34~L~1~1.01~8682.94~L~2~|:252 +1894~14~0.0~~~~false~~~~|1.21~2.6~L~1~1.2~17.34~L~2~1.01~8682.94~L~3~ +|:2521897~15~0.0~~~~false~~~~|1.2~17.34~L~1~1.01~8682.94~L~2~|:252190 +1~16~0.0~~~~false~~~~|1.23~2.5~L~1~1.22~17.34~L~2~1.21~2.6~L~3~|:2521 +908~17~0.0~~~~false~~~~|1.23~2.5~L~1~1.22~17.34~L~2~1.21~2.6~L~3~|:25 +21915~18~0.0~~~~false~~~~|1.21~5.1~L~1~1.2~17.34~L~2~1.01~8682.94~L~3 +~|:2521898~19~0.0~~~~false~~~~|1.2~17.34~L~1~1.01~8682.94~L~2~|:25219 +02~20~0.0~~~~false~~~~|1.24~17.34~L~1~1.23~2.5~L~2~1.21~2.6~L~3~|:252 +1909~21~0.0~~~~false~~~~|1.23~2.5~L~1~1.22~17.34~L~2~1.21~2.6~L~3~|:2 +521916~22~0.0~~~~false~~~~|1.21~2.6~L~1~1.2~17.34~L~2~1.01~8682.94~L~ +3~|:2521903~23~0.0~~~~false~~~~|1.22~17.34~L~1~1.21~2.6~L~2~1.01~8682 +.94~L~3~|:2521910~24~0.0~~~~false~~~~|1.21~2.6~L~1~1.2~17.34~L~2~1.01 +~8682.94~L~3~|:2521917~25~0.0~~~~false~~~~|1.2~17.34~L~1~1.01~8682.94 +~L~2~|:2521911~26~0.0~~~~false~~~~|1.23~2.5~L~1~1.22~17.34~L~2~1.21~2 +.6~L~3~|:2521918~27~0.0~~~~false~~~~|1.22~17.34~L~1~1.21~5.1~L~2~1.01 +~8682.94~L~3~|:2521919~28~0.0~~~~false~~~~|1.23~2.5~L~1~1.22~17.34~L~ +2~1.21~2.6~L~3~|#; print "($compressed)\n"; if($compressed =~ /\\/) { $compressed =~ s/\\:/x01/g; $compressed =~ s/\\|/x02/g; $compressed =~ s/\\~/x03/g; $compressed =~ s/\\\\/x04/g; } print "After ($compressed)\n";

I would just have expected the following \: to be replaced - however it seems every letter is joined...If I remove below it works fine... I am confused...

The Horses Are\:

The output is below -

__OUTPUT__ After (x021x020x020x026x029x022x022x022x022x02~x02Gx02Bx02Px02~x02Ax02 +Cx02Tx02Ix02Vx02Ex02~x020x02~x021x02~x02<x02ax02dx02dx02ix02tx02ix02o +x02nx02ax02lx02ix02nx02fx02ox02>x02Tx02hx02ex02 x02Hx02ox02rx02sx02ex +02sx02 x02Ax02rx02ex02xx020x021x02<x02bx02rx02>x02<x02bx02rx02>x021x0 +2.x02 x02Ax02rx02ax02kx02ax02nx02 x02Tx02rx02ax02ix02lx02<x02bx02rx02 +>x022x02.x02 x02Bx02ax02nx02yx02ax02nx02 x02Tx02rx02ex02ex02<x02bx02r +x02>x023x02.x02 x02Lx02ux02dx02dx02ex02nx02mx02ox02rx02ex02<x02bx02rx +02>x024x02.x02 x02Mx02ax02vx02ex02rx02ix02cx02kx02 x02Mx02ax02nx02<x0 +2bx02rx02>x025x02.x02 x02Sx02tx02ux02nx02nx02ix02nx02gx02 x02Vx02ix02 +ex02wx02<x02bx02rx02>x026x02.x02 x02Tx02hx02ex02 x02Bx02ax02yx02 x02B +x02ax02nx02dx02ix02tx02<x02bx02rx02>x027x02.x02 x02Tx02rx02ax02mx02px +02sx02 x02Lx02ix02kx02ex02 x02Ux02sx02<x02bx02rx02>x028x02.x02 x02Zx0 +2ax02yx02ax02ax02nx02<x02bx02rx02>x02~x02tx02rx02ux02ex02~x025x02.x02 +0x02~x021x022x024x028x027x021x024x020x022x022x027x029x029x02~x02~x02N +x02:x022x025x022x021x028x028x029x02~x021x02~x024x02.x020x02~x021x02.x +022x02~x02~x02~x02fx02ax02lx02sx02ex02~x02~x02~x02~x02|x025x02.x020x0 +2~x024x02.x027x027x02~x02Lx02~x021x02~x021x02.x024x02~x021x025x02.x02 +3x024x02~x02Lx02~x022x02~x021x02.x020x021x02~x028x026x028x022x02.x029 +x024x02~x02Lx02~x023x02~x02|x02:x022x025x022x021x028x029x020x02~x022x +02~x020x02.x020x02~x02~x02~x02~x02fx02ax02lx02sx02ex02~x02~x02~x02~x0 +2|x021x02.x022x024x02~x021x027x02.x023x024x02~x02Lx02~x021x02~x021x02 +.x022x023x02~x022x02.x025x02~x02Lx02~x022x02~x021x02.x022x021x02~x022 +x02.x026x02~x02Lx02~x023x02~x02|x02:x022x025x022x021x028x029x022x02~x +023x02~x020x02.x020x02~x02~x02~x02~x02fx02ax02lx02sx02ex02~x02~x02~x0 +2~x02|x021x02.x022x024x02~x021x027x02.x023x024x02~x02Lx02~x021x02~x02 +1x02.x022x023x02~x022x02.x025x02~x02Lx02~x022x02~x021x02.x022x021x02~ +x022x02.x026x02~x02Lx02~x023x02~x02|x02:x022x025x022x021x028x029x025x +02~x024x02~x020x02.x020x02~x02~x02~x02~x02fx02ax02lx02sx02ex02~x02~x0 +2~x02~x02|x025x02.x020x02~x022x02.x021x026x02~x02Lx02~x021x02~x021x02 +.x024x02~x021x027x02.x023x024x02~x02Lx02~x022x02~x021x02.x020x021x02~ +x028x026x028x022x02.x029x024x02~x02Lx02~x023x02~x02|x02:x022x025x022x +021x028x029x029x02~x025x02~x020x02.x020x02~x02~x02~x02~x02fx02ax02lx0 +2sx02ex02~x02~x02~x02~x02|x021x02.x022x024x02~x021x027x02.x023x024x02 +~x02Lx02~x021x02~x021x02.x022x023x02~x022x02.x025x02~x02Lx02~x022x02~ +x021x02.x022x021x02~x022x02.x026x02~x02Lx02~x023x02~x02|x02:x022x025x +022x021x029x020x024x02~x026x02~x020x02.x020x02~x02~x02~x02~x02fx02ax0 +2lx02sx02ex02~x02~x02~x02~x02|x021x02.x022x024x02~x021x027x02.x023x02 +4x02~x02Lx02~x021x02~x021x02.x022x023x02~x022x02.x025x02~x02Lx02~x022 +x02~x021x02.x022x021x02~x022x02.x026x02~x02Lx02~x023x02~x02|x02:x022x +025x022x021x029x021x023x02~x027x02~x020x02.x020x02~x02~x02~x02~x02fx0 +2ax02lx02sx02ex02~x02~x02~x02~x02|x021x02.x022x024x02~x021x027x02.x02 +3x024x02~x02Lx02~x021x02~x021x02.x022x023x02~x022x02.x025x02~x02Lx02~ +x022x02~x021x02.x022x021x02~x022x02.x026x02~x02Lx02~x023x02~x02|x02:x +022x025x022x021x028x029x021x02~x028x02~x020x02.x020x02~x02~x02~x02~x0 +2fx02ax02lx02sx02ex02~x02~x02~x02~x02|x021x02.x022x021x02~x022x02.x02 +6x02~x02Lx02~x021x02~x021x02.x022x02~x021x027x02.x023x024x02~x02Lx02~ +x022x02~x021x02.x020x021x02~x028x026x028x022x02.x029x024x02~x02Lx02~x +023x02~x02|x02:x022x025x022x021x028x029x023x02~x029x02~x020x02.x020x0 +2~x02~x02~x02~x02fx02ax02lx02sx02ex02~x02~x02~x02~x02|x021x02.x022x02 +~x021x027x02.x023x024x02~x02Lx02~x021x02~x021x02.x020x021x02~x028x026 +x028x022x02.x029x024x02~x02Lx02~x022x02~x02|x02:x022x025x022x021x028x +029x026x02~x021x020x02~x020x02.x020x02~x02~x02~x02~x02fx02ax02lx02sx0 +2ex02~x02~x02~x02~x02|x021x02.x027x02~x022x020x02.x020x02~x02Lx02~x02 +1x02~x021x02.x024x02~x021x027x02.x023x024x02~x02Lx02~x022x02~x021x02. +x020x021x02~x028x026x028x022x02.x029x024x02~x02Lx02~x023x02~x02|x02:x +022x025x022x021x029x020x020x02~x021x021x02~x020x02.x020x02~x02~x02~x0 +2~x02fx02ax02lx02sx02ex02~x02~x02~x02~x02|x021x02.x022x023x02~x022x02 +.x025x02~x02Lx02~x021x02~x021x02.x022x022x02~x021x027x02.x023x024x02~ +x02Lx02~x022x02~x021x02.x022x021x02~x022x02.x026x02~x02Lx02~x023x02~x +02|x02:x022x025x022x021x029x020x025x02~x021x022x02~x020x02.x020x02~x0 +2~x02~x02~x02fx02ax02lx02sx02ex02~x02~x02~x02~x02|x021x02.x022x021x02 +~x022x02.x026x02~x02Lx02~x021x02~x021x02.x022x02~x021x027x02.x023x024 +x02~x02Lx02~x022x02~x021x02.x020x021x02~x028x026x028x022x02.x029x024x +02~x02Lx02~x023x02~x02|x02:x022x025x022x021x029x021x024x02~x021x023x0 +2~x020x02.x020x02~x02~x02~x02~x02fx02ax02lx02sx02ex02~x02~x02~x02~x02 +|x021x02.x022x02~x021x027x02.x023x024x02~x02Lx02~x021x02~x021x02.x020 +x021x02~x028x026x028x022x02.x029x024x02~x02Lx02~x022x02~x02|x02:x022x +025x022x021x028x029x024x02~x021x024x02~x020x02.x020x02~x02~x02~x02~x0 +2fx02ax02lx02sx02ex02~x02~x02~x02~x02|x021x02.x022x021x02~x022x02.x02 +6x02~x02Lx02~x021x02~x021x02.x022x02~x021x027x02.x023x024x02~x02Lx02~ +x022x02~x021x02.x020x021x02~x028x026x028x022x02.x029x024x02~x02Lx02~x +023x02~x02|x02:x022x025x022x021x028x029x027x02~x021x025x02~x020x02.x0 +20x02~x02~x02~x02~x02fx02ax02lx02sx02ex02~x02~x02~x02~x02|x021x02.x02 +2x02~x021x027x02.x023x024x02~x02Lx02~x021x02~x021x02.x020x021x02~x028 +x026x028x022x02.x029x024x02~x02Lx02~x022x02~x02|x02:x022x025x022x021x +029x020x021x02~x021x026x02~x020x02.x020x02~x02~x02~x02~x02fx02ax02lx0 +2sx02ex02~x02~x02~x02~x02|x021x02.x022x023x02~x022x02.x025x02~x02Lx02 +~x021x02~x021x02.x022x022x02~x021x027x02.x023x024x02~x02Lx02~x022x02~ +x021x02.x022x021x02~x022x02.x026x02~x02Lx02~x023x02~x02|x02:x022x025x +022x021x029x020x028x02~x021x027x02~x020x02.x020x02~x02~x02~x02~x02fx0 +2ax02lx02sx02ex02~x02~x02~x02~x02|x021x02.x022x023x02~x022x02.x025x02 +~x02Lx02~x021x02~x021x02.x022x022x02~x021x027x02.x023x024x02~x02Lx02~ +x022x02~x021x02.x022x021x02~x022x02.x026x02~x02Lx02~x023x02~x02|x02:x +022x025x022x021x029x021x025x02~x021x028x02~x020x02.x020x02~x02~x02~x0 +2~x02fx02ax02lx02sx02ex02~x02~x02~x02~x02|x021x02.x022x021x02~x025x02 +.x021x02~x02Lx02~x021x02~x021x02.x022x02~x021x027x02.x023x024x02~x02L +x02~x022x02~x021x02.x020x021x02~x028x026x028x022x02.x029x024x02~x02Lx +02~x023x02~x02|x02:x022x025x022x021x028x029x028x02~x021x029x02~x020x0 +2.x020x02~x02~x02~x02~x02fx02ax02lx02sx02ex02~x02~x02~x02~x02|x021x02 +.x022x02~x021x027x02.x023x024x02~x02Lx02~x021x02~x021x02.x020x021x02~ +x028x026x028x022x02.x029x024x02~x02Lx02~x022x02~x02|x02:x022x025x022x +021x029x020x022x02~x022x020x02~x020x02.x020x02~x02~x02~x02~x02fx02ax0 +2lx02sx02ex02~x02~x02~x02~x02|x021x02.x022x024x02~x021x027x02.x023x02 +4x02~x02Lx02~x021x02~x021x02.x022x023x02~x022x02.x025x02~x02Lx02~x022 +x02~x021x02.x022x021x02~x022x02.x026x02~x02Lx02~x023x02~x02|x02:x022x +025x022x021x029x020x029x02~x022x021x02~x020x02.x020x02~x02~x02~x02~x0 +2fx02ax02lx02sx02ex02~x02~x02~x02~x02|x021x02.x022x023x02~x022x02.x02 +5x02~x02Lx02~x021x02~x021x02.x022x022x02~x021x027x02.x023x024x02~x02L +x02~x022x02~x021x02.x022x021x02~x022x02.x026x02~x02Lx02~x023x02~x02|x +02:x022x025x022x021x029x021x026x02~x022x022x02~x020x02.x020x02~x02~x0 +2~x02~x02fx02ax02lx02sx02ex02~x02~x02~x02~x02|x021x02.x022x021x02~x02 +2x02.x026x02~x02Lx02~x021x02~x021x02.x022x02~x021x027x02.x023x024x02~ +x02Lx02~x022x02~x021x02.x020x021x02~x028x026x028x022x02.x029x024x02~x +02Lx02~x023x02~x02|x02:x022x025x022x021x029x020x023x02~x022x023x02~x0 +20x02.x020x02~x02~x02~x02~x02fx02ax02lx02sx02ex02~x02~x02~x02~x02|x02 +1x02.x022x022x02~x021x027x02.x023x024x02~x02Lx02~x021x02~x021x02.x022 +x021x02~x022x02.x026x02~x02Lx02~x022x02~x021x02.x020x021x02~x028x026x +028x022x02.x029x024x02~x02Lx02~x023x02~x02|x02:x022x025x022x021x029x0 +21x020x02~x022x024x02~x020x02.x020x02~x02~x02~x02~x02fx02ax02lx02sx02 +ex02~x02~x02~x02~x02|x021x02.x022x021x02~x022x02.x026x02~x02Lx02~x021 +x02~x021x02.x022x02~x021x027x02.x023x024x02~x02Lx02~x022x02~x021x02.x +020x021x02~x028x026x028x022x02.x029x024x02~x02Lx02~x023x02~x02|x02:x0 +22x025x022x021x029x021x027x02~x022x025x02~x020x02.x020x02~x02~x02~x02 +~x02fx02ax02lx02sx02ex02~x02~x02~x02~x02|x021x02.x022x02~x021x027x02. +x023x024x02~x02Lx02~x021x02~x021x02.x020x021x02~x028x026x028x022x02.x +029x024x02~x02Lx02~x022x02~x02|x02:x022x025x022x021x029x021x021x02~x0 +22x026x02~x020x02.x020x02~x02~x02~x02~x02fx02ax02lx02sx02ex02~x02~x02 +~x02~x02|x021x02.x022x023x02~x022x02.x025x02~x02Lx02~x021x02~x021x02. +x022x022x02~x021x027x02.x023x024x02~x02Lx02~x022x02~x021x02.x022x021x +02~x022x02.x026x02~x02Lx02~x023x02~x02|x02:x022x025x022x021x029x021x0 +28x02~x022x027x02~x020x02.x020x02~x02~x02~x02~x02fx02ax02lx02sx02ex02 +~x02~x02~x02~x02|x021x02.x022x022x02~x021x027x02.x023x024x02~x02Lx02~ +x021x02~x021x02.x022x021x02~x025x02.x021x02~x02Lx02~x022x02~x021x02.x +020x021x02~x028x026x028x022x02.x029x024x02~x02Lx02~x023x02~x02|x02:x0 +22x025x022x021x029x021x029x02~x022x028x02~x020x02.x020x02~x02~x02~x02 +~x02fx02ax02lx02sx02ex02~x02~x02~x02~x02|x021x02.x022x023x02~x022x02. +x025x02~x02Lx02~x021x02~x021x02.x022x022x02~x021x027x02.x023x024x02~x +02Lx02~x022x02~x021x02.x022x021x02~x022x02.x026x02~x02Lx02~x023x02~x0 +2|x02)

Replies are listed 'Best First'.
Re: Why does this have strange results.
by psini (Deacon) on Jul 27, 2009 at 18:09 UTC

    In this line:

    $compressed =~ s/\\|/x02/g;

    you should escape the pipe "|", too.

    $compressed =~ s/\\\|/x02/g;

    Rule One: "Do not act incautiously when confronting a little bald wrinkly smiling man."

Re: Why does this have strange results.
by ikegami (Patriarch) on Jul 27, 2009 at 18:11 UTC
    s/\\:/x01/g; # Replaces each "\" followed by ":" s/\\|/x02/g; # Replaces each "\" and zero-length string s/\\~/x03/g; # Replaces each "\" followed by "~" s/\\\\/x04/g; # Replaces each "\" pair

    And there's a zero-length string between each character.

    I think you want:

    s/\\:/x01/g; # Replaces each "\" followed by ":" s/\\\|/x02/g; # Replaces each "\" followed by "|" s/\\~/x03/g; # Replaces each "\" followed by "~" s/\\\\/x04/g; # Replaces each "\" pair
    or
    s/:/x01/g; # Replaces each ":" s/\|/x02/g; # Replaces each "|" s/~/x03/g; # Replaces each "~" s/\\/x04/g; # Replaces each "\"
Re: Why does this have strange results.
by Anonymous Monk on Jul 27, 2009 at 18:12 UTC
    | V $compressed =~ s/\\:/x01/g; ^ |
    g means global