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

A simple grouping of list items

by Lady_Aleena (Chaplain)
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
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 studying the Monastery: (7)
As of 2014-08-27 08:52 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (232 votes), past polls