#!/usr/bin/perl # # email_address # # AUTHOR: # Dan Harkless # # COPYRIGHT: # This file is Copyright (C) 2008 by Dan Harkless, and is released under the # GNU General Public License . # # USAGE: # % email_address 'email address possibly including real name' # % email_address < file_containing_such_addresses # # EXAMPLES: # % email_address '"Dan Harkless" ' # prints dan@unitech.com # % email_address ' Dan Harkless' # prints dan@unitech.com # % email_address '' # prints dan@unitech.com # % email_address '(Dan Harkless)dan@unitech.com' # prints dan@unitech.com # % email_address 'dan (Dan Harkless)' # prints dan # % email_address 'dan@unitech.com' # prints dan@unitech.com # % email_address 'dan' # prints dan # # DESCRIPTION: # Takes a full email address which may also include a real name and prints out # just the actual address part. If an email address isn't given as an # argument, each line of stdin is processed as such an address. # # DATE MODIFICATION # ========== ================================================================== # 2008-09-02 "use English qw(-no_match_vars)": avoid regex performance penalty. # 2000-02-25 If an email address argument isn't given, process stdin. # 1998-02-27 Rewrote as a Perl script since 'expr' is braindead on HP-UX 10.x. # 1997-05-30 Original sh script. ## Modules used ################################################################ use English qw(-no_match_vars); # allow use of names like @ARG rather than @_ use File::Basename; # for basename() ## Subroutines ################################################################# sub email_address($) { # Also appears in my medit script -- should really be in a module. $ARG = shift; if (/<([^ >]+)>/) { # "Dan Harkless " style. return $1; } elsif (/\(.*\) *([^ ]+)/) { # "(Dan Harkless) dan@unitech.com" style. return $1; } elsif (/([^ ]+) *\(.*\)/) { # "dan@unitech.com (Dan Harkless)" style. return $1; } elsif (/ *([^ ]+) */) { # Possible whitespace around bare address. return $1; } else { # Empty address. return $ARG; } } ## Main ######################################################################## $progname = basename($PROGRAM_NAME); if (@ARGV == 0) { while () { chomp; # prevent double newlines print email_address($ARG), "\n"; } } elsif (@ARGV == 1) { print email_address($ARGV[0]), "\n"; } else { print "usage: $progname 'email address possibly including real name'\n"; print " $progname < file_containing_such_addresses\n"; exit 1; }