develooper Front page | perl.beginners | Postings from February 2009

Re: how to do this in one line (with map?)

Thread Previous
From:
John W. Krahn
Date:
February 18, 2009 22:31
Subject:
Re: how to do this in one line (with map?)
Message ID:
499CFC9A.2070608@shaw.ca
Rob Dixon wrote:
> 
> John W. Krahn wrote:
>> 
>> pablo@compugenic.com wrote:
>>> 
>>> I want to extract a list of postfix's queue id's.  The 'mailq' command
>>> returns output as follows:
>>>
>>> right now I'm doing the following:
>>>
>>> my @ids;
>>>
>>> foreach (`mailq`) {
>>>     next unless /^\w+/;
>>>     chomp;
>>>     push @ids, (split)[0];
>>> }
>>>
>>> I know it can be done with one line.  Here's what I've got so far:
>>>
>>> my @ids = map {chomp; (split)[0] if /^\w/} `mailq`;
>> 
>> You don't need chomp() because split() removes *all* whitespace, and 
>> besides you are only using the first field.
>>
>>> This 'kinda' works, but it also adds a bunch of blank elements to the
>>> @ids array.  What am I doing wrong?
>>
>> my @ids = map /^\w/ ? (split)[0] : (), `mailq`;
> 
>   my @ids = map /^(\w+)/, `mailq`;

Not the same thing.  Possibly:

my @ids = map /^(\S+)/, `mailq`;

Or:

my @ids = map /^(\w\S*)/, `mailq`;

Or:

my @ids = `mailq` =~ /^\w\S*/mg;




John
-- 
Those people who think they know everything are a great
annoyance to those of us who do.        -- Isaac Asimov

Thread Previous


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About