Thanks all, here comes the update one: #!/usr/bin/env perl
use strict; use warnings; use Carp qw(croak); use autodie qw(open close); use File::Basename; croak "Usage: ./bibextract.pl tex_file.tex" unless defined $ARGV[0]; my $infile = $ARGV[0]; my $tex_file = $infile; #my $bib_filename = "/home/lina/texmf/bibtex/bib/biophymd.bib"; my $bib_filename = "try.bib"; my $bib_abbrev_filename = "/home/lina/texmf/bibtex/bib/biophyabbrev.bib"; my $extracted_bib = "basename($infile).bib"; my $cited; my @citeditems; my $item; ## read all the cited items from .tex file and save it to $cited open my $fh, '<', $tex_file; while(<$fh>){ if(/cite\{(\S+)\}/){ $cited = sprintf "%s\n",$1; $cited =~ tr/\,/\n/; ########### the problem is here. it failed to split this to different element in the array @citeditems. push(@citeditems,$cited); } } close($fh); ## read the .bib database and extract the cited out open my $fh2, '<', $bib_filename; foreach $item (@citeditems){ print $item; #match($item); #print "a\n"; } sub match{ my $reg = @_; LINE: while(my $line = <$fh2>){ if ($line =~ m/$reg\,/ .. $line =~ /^\}$/){ ######## thanks Tim and David's suggestion in another thread. I rechecked it worked. print $line; #last; } } } -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/