Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re: Re: Fetching unique owner name

by Anonymous Monk
on Dec 03, 2002 at 14:52 UTC ( [id://217233]=note: print w/replies, xml ) Need Help??


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

HOw would this work? Am I in the right direction??
@temp = '/mydirectory/directory'; my ( @temp, %authors ); @temp = sort map { my @b=split; $b[2]; } `ls -l`; foreach ( @temp ) { $authors{$}=1 if not $authors{$_} and length $_; } print "$_\n" for keys %authors;'

Replies are listed 'Best First'.
Re^3: Fetching unique owner name
by JaWi (Hermit) on Dec 03, 2002 at 17:14 UTC
    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."

      Thanks for all the help.

      This works except I keep getting these error messages along with output:
      Use of uninitialized value at per2.pl line 5. Use of uninitialized value at per2.pl line 5. Use of uninitialized value at per2.pl line 8. Use of uninitialized value at per2.pl line 8. smith rogers richards
      Here is the script:
      #!/usr/local/bin/perl -w use strict; my ( @temp, %authors ); @temp = sort map { my @b=split; $b[2]; } `ls -l /directory/pth/here`; foreach ( @temp ) { $authors{$_}=1 if not $authors{$_} and length $_; #I had to add $_ because the other way "$authors{$}=1" gave me an erro +r } print "$_\n" for keys %authors;
        Hi,

        Of course! Your right! I should stop coding Perl from the head and use the interpreter instead. If I tested it first, I would have come to the following code:

        ... @temp = sort map { ( split )[ 2 ]; } `ls -l /directory/pth/here`; foreach( @temp ) { $authors{$_}=1 if not $authors{$_} and length $_; } ...
        Indeed, I made a little typo in my previous solution, $authors{$} had to be $authors{$_};

        -- JaWi

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

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://217233]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (5)
As of 2024-04-19 09:47 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found