in reply to Splitting the record using the delimiter

G'day mariaprabudass,

Welcome to the Monastery.

The output I get is 'Hello\'; not the '"**Hello**"' you show.

What you actually want to split on is a pipe (|) that is not preceded by a backslash (\). You can do this with, what is called, a negative look-behind assertion which looks like: (?<!PATTERN). See "perlre: Extended Patterns" for more details.

Both the pipe and backslash characters are special in regexes and need to be escaped. This gives a split pattern of /(?<!\\)\|/.

Here's my test code:

#!/usr/bin/env perl -l use strict; use warnings; my $id = 'Hi|Hello\|Sir'; my @code = split /\|/, $id; print $code[1]; @code = split /(?<!\\)\|/, $id; print $code[1];

Output:

Hello\ Hello\|Sir

— Ken