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

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

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 $_; }