I've been working on sorting by IP Address in an output file that comprises field1(hostname), field2(hosttype), IP Address.
Found a very elegant solution here (http://www.perlmonks.org/index.pl?node_id=88719), that I think I can re-write to suite my needs but am having a tough time figuring out exactly what's been done. Some assistance on guiding me as to what it's doing would be greatly appreciated - don't want someone to tell me how to re-write, please, just want to fully understanding how a clearly well-thought out piece of code really works so that I can re-apply it to suit. This is for sorting IP1, IP2 and a text field. Here's the code along with my comments as to what I think is going on print map{sprintf(("%d.%d.%d.%d,"x2)."%s\n",(split/,/)[1..8,0])} # Break the IP addresses into numeric strings. Do it 2 times. # Is the '"%s\n"' identifying the final (text) field? Then it'll 'split' the record on each delimiting comma. sort map{sprintf"%s".",%3d"x8,(split/\W/)[8,0..7]} # Put it back together in the same field sequence? Don't quite see how the "USA" entry is being put back into the string. # Why 'split', and not 'join'? <DATA> 1.2.3.4,1.2.3.255,USA 2.3.4.0,2.3.4.25,USA What's really causing my head to ache is not fully understanding what the [1..8,0] and [8,0..7] values are doing and their effect upon the resulting string. Does the '8' value reflect the total number of IP fields to be worked on? What's happening with the final string of text? I think I'm _real_ close to fully understanding this (in fact, writing out this mail has helped a chunk, too, by making me think through exactly what I'm asking for help with), but am that teeny little bit short of an epiphany here. Thanks in advance for any guidance. Patrick Salmon.
