#!/usr/bin/env perl
use Text::vCard::Addressbook;
my $address_book =
  Text::vCard::Addressbook->load( ["$ENV{HOME}/.contacts.vcf"] );

my $query = $ARGV[0];

if ( my ($category) = ( $query =~ /^#(.*)/ ) ) {
    my @members;
    foreach my $vcard ( $address_book->vcards() ) {
        for ( @{ $vcard->get('categories') || [] } ) {
            next unless $_->value() =~ /(^|,)$category/i;
            if ( my $email = $vcard->get_simple_type('email') ) {
                push @members, sprintf "%s <%s>", $vcard->fullname(), $email;
            }
        }
    }
    print join( ', ', @members ), "\n" if @members;
}
else {
    foreach my $vcard ( $address_book->vcards() ) {
        if ( $vcard->fullname() =~ /$query/i ) {
            printf "%s <%s>\n", $vcard->fullname(), $_->value()
              for @{ $vcard->get('email') || [] };
        }
    }
}