Encapsulated cleverness

| Perl | 5 Comments

Is there anyone out there who can tell me what the following piece of code actually does?

@list_out = keys %{ {map {$_=>1} @list_in} };

If so then please leave a comment if you dare. I am willing to bet a good many euros that not a single person out there knows the answer to this abstract perlishness.

Reference

5 Comments

This uniqifies a list, which can be determined by looking at the individual pieces from the inside out:

map {$_=>1} @list_in

map() processes each element in @list_in, and for each element it returns a list (, 1). When put in braces:

{ map {$_=>1} @list_in }

it yields a reference to an anonymous hash with the (key, value)
pairs coming out of the map. The trick here is that when a key
which already exists in the hash comes out of @list_in again, the
original is overwritten by the new value.

To dereference a reference to a datastructure, you put it in braces preceded by the sigil of the type of the datastructure ('@' for arrays, '%' for hashes, '$' for scalars, etc.). So this:

%{ { map {$_=>1} @list_in } }

yields a hash. We're only interested in the keys, which are the
values of the @list_in array, uniqified, so we use the keys() builtin on the hash to get a list of the keys:

@list_out = %{ { map {$_=>1} @list_in } };

And we're done. The problem with this approach is that the order of the elements is not preserved. Using List::MoreUtils::uniq() (which is 2 lines of code), does preserve the order.

In record time as usual Arjen, shouldn't have expected anything less (although obviously a cut-and-paste sleight of hand). I guess I owe you.

No cutting and pasting was involved, this is original content.

You're right, I was misled by your professional-looking content is all, and (unjustly) jumped to conclusions. Should have checked first. Keep up the good work.

You're right, I was mislead by the professional-looking content is all, and (unjustly) jumped to conclusions. Should have checked first. Keep up the good work.

Random entries

Here are some random entries that you might be interested in:

Recent Assets

  • tegen-par-2024-2nd-place.jpeg
  • stanford-reunion.png
  • kiff.png
  • hoid.png
  • Dad-in-front-of-log-cabin.png
  • mistborn-trilogy.png
  • 2024-03-Heren1-27h.png
  • three-body-problem.png
  • 10CC.png
  • minds-and-machines.jpeg
  • puglia.png
  • 2023-09-24-jong-tegen-oud-1.jpg

Recent Comments

Golf Handicap

Information

This personal weblog was started way back on July 21, 2001 which means that it is 7-21-2001 old.

So far this blog contains no less than 2518 entries and as many as 1877 comments.

Important events

Graduated from Stanford 6-5-1979 ago.

Kiffin Rockwell was shot down and killed 9-23-1916 ago.

Believe it or not but I am 10-11-1957 young.

First met Thea in Balestrand, Norway 6-14-1980 ago.

Began well-balanced and healthy life style 1-8-2013 ago.

My father passed away 10-20-2000 ago.

My mother passed away 3-27-2018 ago.

Started Gishtech 04-25-2016 ago.