vxp has asked for the wisdom of the Perl Monks concerning the following question:

im trying to put together a lil' script thatll sort email addresses for me. ive a small file with:

blah@aol.com
blah@yahoo.com
blah@msn.com
blah2@aol.com
blah2@yahoo.com
blah2@msn.com
blah3@aol.com
blah3@yahoo.com
blah3@msn.com

in it and this script DOES sort them, only it loses blah@aol.com somewhere in the middle. any idea whats wrong?

#!/usr/bin/perl use Mail::AddressSort; open(EMAILS, "/root/emails") or die "Couldn't open email list\n"; while (<EMAILS>) { @addresses = <EMAILS>; $list=Mail::AddressSort->new(); $list->input(@addresses); (@addresses)=$list->sorted(); print "@addresses"; }

Edited by mirod, 2002-08-12: added <pre> tags around the email address list.

Replies are listed 'Best First'.
Re: problems with Mail::AddressSort
by Chady (Priest) on Aug 11, 2002 at 20:07 UTC

    Did you know that when you do while (<EMAILS>) you actually shift the first element out and place it in $_? that's how you actually get out of the while loop when you're out of elements.

    that's why you are loosing the first element of the list. so your while loop is actually doing nothing but take blah@aol.com out.

    this is probably what you wanted to say:
    #!/usr/bin/perl -w use strict; use Mail::AddressSort; open(EMAILS, "/root/emails") or die "Couldn't open email list\n"; my @addresses = <EMAILS>; if (@addresses) { my $list=Mail::AddressSort->new(); $list->input(@addresses); (@addresses)=$list->sorted(); print join "\n", @addresses; }

    He who asks will be a fool for five minutes, but he who doesn't ask will remain a fool for life.

    Chady | http://chady.net/