Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

A simple grouping of list items

by Lady_Aleena (Deacon)
on Jul 07, 2012 at 19:12 UTC ( #980500=CUFP: print w/ replies, xml ) Need Help??

I wanted to group some list items when I went to print it out so I could insert sleep between the groups. This little thing is what I came up with. I know it is not big and complex, but I was pretty happy with it. (I recently rewrote the script this was in and do not need it anymore, so I decided to share it here.)

my $previous = ""; for my $item (@list) { sleep(5) if $item !~ /^$previous/; print $item; $previous = $item; $previous =~ s/^(.+)\: .+/$1/; # the regex by which you want to grou +p your items }

Update: The regex currently in the code is what I was using, you can use whatever regex fits your need.

Have a cookie and a very nice day!
Lady Aleena

Comment on A simple grouping of list items
Select or Download Code
Replies are listed 'Best First'.
Re: A simple grouping of list items
by monsoon (Pilgrim) on Jul 08, 2012 at 01:38 UTC
    Just for fun, golfing...
    "" =~ /()/; for (@list) { sleep(5) if !/^$1/; print; /^(.+)\:/; }
    By the way the original script wasn't working if the items were ending with \n, because \n wasn't being replaced and $item was never matching $previous on the next iteration. However, if there were no \n characters, I had to set $| to non zero to get the expected behavior, otherwise output was getting buffered and was printed in one chunk at the very end.
Re: A simple grouping of list items
by ruzam (Curate) on Jul 08, 2012 at 03:15 UTC

    What the heck, just for fun, some minor code changes for faster execution.

    caveat: not tested, not benchmarked, maybe not even syntactically correct, could cause different output :)

    my $previous = ""; # skip $item variable # 'for' just looks funny in this use foreach (@list) { # regex once instead of twice # no extra work shuffling $previous back and forth until needed if (m/^(.+)\: .+/ and $1 ne $previous) { $previous = $1; # take the sleep hit on the first item to save time later # (maybe even 5 seconds worth if you have a lot of items) sleep(5); } print $_; }

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: CUFP [id://980500]
Approved by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (9)
As of 2015-07-30 23:48 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (273 votes), past polls