use warnings; use strict; my @lines = ; for my $line (@lines){ chomp $line; if($line =~ m/(^OBX\|)([^\|]*\|)([^\^]*)(.*$)/){ my ($pre, $read, $post) = ($1 . $2, $3, $4); $read =~ s/([a-zA-Z])/($1 lt 'a' ? 'U' : 'L').$1/ge; $line = "$pre$read$post"; } print "$line\n"; } __DATA__ NTE||L|obr note OBX|NM|aaA..^Haem^RD2|7.5|g/dL|13.0-18.0|OR| NTE||L|obx note 1/1 for 3058 OBX|NM|dBf..^TWC^RD2|8.9|10*9/L|4.0-11.0|| #### NTE||L|obr note OBX|NM|LaLaUA..^Haem^RD2|7.5|g/dL|13.0-18.0|OR| NTE||L|obx note 1/1 for 3058 OBX|NM|LdUBLf..^TWC^RD2|8.9|10*9/L|4.0-11.0||