http://www.perlmonks.org?node_id=217285


in reply to Re: Re: Fetching unique owner name
in thread Fetching unique owner name

Hi,

Sorry, I (wrongly) assumed you were an advanced Perl monk. I'll explain my solution step by step:

my ( @temp, %authors ); @temp = sort map { my @b=split; $b[2]; } `ls -l /path/to/authors`;
(NB: note the added path, I forgot that in my original answer!)
You should read this from right to left: each line of the output of the ls command is split and a map is created of each second element (ie. the user names). The array returned by map is sorted and assigned to @temp.
The array @temp now contains all authors of the files in your directory, including doubles!

foreach ( @temp ) { $authors{$}=1 if not $authors{$_} and length $_; }
This will loop through @temp and make a hash with the author names as key. The value is only stored if it doesn't exists already and has a length of > 0.
I do this to ensure the hash only contains unique names.

print "$_\n" for keys %authors;
This loops through the keys of the hash %authors and prints them. To get an array of the unique authors of the files in your directory you would do something like my @unique_authors = keys %authors;

Hope this helps,

-- JaWi

"A chicken is an egg's way of producing more eggs."