-2
use strict;
use warnings;
#My sample bbl content
my $sample = '
reflistStart
\bibtype{Article}%
\bibinfo{title}{Sample Title}
reflistEnd
reflistStart
\bibtype{Book}%
\bibinfo{title}{Sample Title}
reflistEnd
reflistStart
\bibtype{Proceedings}%
\bibinfo{title}{Sample Title}
reflistEnd
';
$sample=~s#reflistStart((?:(?!reflist(?:Start|End)).)*)reflistEnd#my $fulcnt=$&;
if($fulcnt=~m/\\bibtype\{article\}/i)
{
$fulcnt = ArticleReplacement($fulcnt);
}
elsif($fulcnt=~m/\\bibtype\{book\}/i)
{
$fulcnt = BookReplacement($fulcnt);
}
elsif($fulcnt=~m/\\bibtype\{proceedings\}/i)
{
$fulcnt = ProceedingsReplacement($fulcnt);
}
($fulcnt);
#ges;
sub ArticleReplacement
{
my $arttext = shift;
$arttext=~s/\\bibinfo\{title\}/\\bibinfo\{articletitle\}/g;
return $arttext;
}
sub BookReplacement
{
my $arttext = shift;
$arttext=~s/\\bibinfo\{title\}/\\bibinfo\{booktitle\}/g;
return $arttext;
}
sub ProceedingsReplacement
{
my $arttext = shift;
$arttext=~s/\\bibinfo\{title\}/\\bibinfo\{proceedingstitle\}/g;
return $arttext;
}
输出子功能:
reflistStart
\bibtype{Article}%
\bibinfo{articletitle}{Sample Title} #title changed as articletitle
reflistEnd
reflistStart
\bibtype{Book}%
\bibinfo{Booktitle}{Sample Title}
reflistEnd
reflistStart
\bibtype{Proceedings}%
\bibinfo{Proceedingstitle}{Sample Title}
reflistEnd;
我在这里做的每个引用类型(文章,书籍,论文集)“IF”条件。因此,我的问题,有任何其他通过使用哈希例如:我怎么能重复使用哈希
my %Refstyles = ('article' => \&ArticleReplacement, 'book' => \&BookReplacement, ...);
我认为你需要解释你想要做的是什么。此外,'print $ Refstyles {$ 1}'将打印出类似于'CODE(0x1e8fea0)'的东西,并且根本不会调用子例程。 – Borodin
更新了我的问题 – ssr1012
不,即使在您编辑之后,您确实不清楚您要做什么或者遇到什么问题。 –