For what it's worth, I second
imp's suggestion to use split. Even though the split version
$_ = join '|', map {$_ ||= 'empty' } split('\|',$_,-1);
is a little longer than the regex
s/(?<=\|)\|/empty|/g;
It's closer to how one thinks of a delimited record, and so it's easier to change if you need to.
One difference is that the split version puts the 'empty' string in the first field, if it's empty, while the regex version doesn't, So that may be the most significant difference for you.
Update: Corrected missing negative limit in split. See graff's comment.