在数组列表项中,如何使用逗号分隔存储值,并使用perl以点结束

ssr*_*012 0 regex perl

 use strict;
 use warnings;

 my $tmp = join "\n", <DATA>;
 my @biblables = ();
Run Code Online (Sandbox Code Playgroud)

列表项将被提取并存储到while循环中的@biblables中

 while($tmp=~m/\\bibitem\[([^\[\]]*)\]{([^\{\}]*)}/g)
 {
      push(@biblables, "\\cite{$2}, ");
 }

 print @biblables;
Run Code Online (Sandbox Code Playgroud)

打印时我们得到的输出如下:

 \cite{BuI2001},\cite{BuI2002},\cite{BuI2003},\cite{BuI2004},\cite{BuI2005},\cite{BuI2006},
Run Code Online (Sandbox Code Playgroud)

但是我们需要像这样的输出

 \cite{BuI2001},\cite{BuI2002},\cite{BuI2003},\cite{BuI2004},\cite{BuI2005},\cite{BuI2006}.
Run Code Online (Sandbox Code Playgroud)

因此,我们可以使用post regex在数组中的listitem末尾插入点

 while($tmp=~m/\\bibitem\[([^\[\]]*)\]{([^\{\}]*)}/g)
 {
      my $post = $';
      if($post!~m/\\bibitem\[([^\[\]]*)\]{([^\{\}]*)}/)
      {  push(@biblables, "\\cite{$2}.");  }
      else {  push(@biblables, "\\cite{$2}, ");  }
 }

 print @biblables;
Run Code Online (Sandbox Code Playgroud)

如果有很短的方法可以得到这个输出,请你告诉我

#
__DATA__    
\bibitem[{BuI (2001)}]{BuI2001}    
\bibitem[{BuII (2002)}]{BuI2002}    
\bibitem[{BuIII (2003)}]{BuI2003}    
\bibitem[{BuIV (2004)}]{BuI2004}    
\bibitem[{BuV (2005)}]{BuI2005}    
\bibitem[{BuVI (2006)}]{BuI2006}
Run Code Online (Sandbox Code Playgroud)

ste*_*ieb 7

您可以在事后添加逗号和句点:

while($tmp=~m/\\bibitem\[([^\[\]]*)\]{([^\{\}]*)}/g){
   push(@biblables, "\\cite{$2}");
}

print join ', ', @biblables;
print ".\n";
Run Code Online (Sandbox Code Playgroud)