biblist-ref (1214B)
1 #!/usr/bin/env perl 2 use strict; 3 use warnings; 4 use Text::BibTeX; 5 6 my ($src) = @ARGV; 7 my $bib = $ENV{BIB} or die "BIB is not set\n"; 8 -f $bib or die "No BIB=$bib\n"; 9 10 my $bibfile = Text::BibTeX::File->new($bib); 11 12 my %entry; 13 while (my $e = Text::BibTeX::Entry->new($bibfile)) { 14 next unless $e->parse_ok; 15 next unless $e->metatype eq BTE_REGULAR; 16 17 my $key = $e->key; 18 19 $entry{$key} = { 20 author => $e->get("author") // "", 21 title => $e->get("title") // "", 22 alias => $e->get("alias") // "", 23 year => $e->get("year") // "", 24 localrefs => $e->get("localrefs") // "", 25 }; 26 } 27 28 die "key not found: $src\n" unless exists $entry{$src}; 29 30 my %localrefs = $entry{$src}{localrefs} =~ /\s*([^=]+)=(\S+)\s*/g; 31 my @sorted = (!grep { $_ !~ /^\d+$/ } keys %localrefs) 32 ? sort { $a <=> $b } keys %localrefs 33 : sort { $a cmp $b } keys %localrefs; 34 35 for my $n (@sorted) { 36 my $dst = $localrefs{$n}; 37 38 my $author = $entry{$dst}{author} // "?"; 39 my $year = $entry{$dst}{year} // "?"; 40 my $title = $entry{$dst}{title} // "?"; 41 my $alias = $entry{$dst}{alias} // "?"; 42 43 print "$dst | $n | $alias | $title | $author | $year\n"; 44 }