use strict; while(){ chomp; $_=~s/()((?:(?!<\/citref>).)*)(<\/citref>)/$1.idgen($2,$4).$3.citeref($4).$5/sgie; print "$_\n"; } sub idgen{ my ($id,$idcon) = @_; if($idcon =~/,/){ $idcon=~s/([^,]+)(?=,|$)/$id$1/gi; $idcon=~s/,/ /gi; } else{ $idcon=$id.$idcon; } return($idcon); } sub citeref{ my ($con) = @_; if($con =~/,/){ my (@con) = split/,/,$con; map{s/[a-z]+/$&<\/it>/i} @con; $con =join(',',@con); } else{ $con =~s/[a-z]+/$&<\/it>/gi; } return($con); }