Hi Midget,
I just copy here below part of my post in answer to your cross post of your question on Perl Monks forum.
As I said, I think the four nested foreach loops I suggested above is probably the best solution: clean, straight forward, easy to understand and efficient.
For the fun of it, however, let me suggest a kind of "Schwartzian" solution, which could also be called a "Lisp written in Perl" solution (or Scheme, or Haskell, or whatever functional language written in Perl):
Perl Code:
Original
- Perl Code |
|
|
|
my @sku =
qw/SKU1 SKU2 SKU3/;
my @colors =
qw/BLU GRN WHT BLK /;
my @sizes =
qw / S M L XL 2X /;
print map { $col =
$_;
map { $siz =
$_;
map {$a1 =
$_;
map "$_ $a1 $siz $col\n",
@sku;
} @tslh} @sizes } @colors;
(I have added spaces between the fields to make the output easier to read.) This prints (I copy only the beginning and the end of the 240-line printout):
Code:
SKU1 t S BLU
SKU2 t S BLU
SKU3 t S BLU
SKU1 s S BLU
SKU2 s S BLU
SKU3 s S BLU
SKU1 l S BLU
SKU2 l S BLU
(...)
SKU2 s 2X BLK
SKU3 s 2X BLK
SKU1 l 2X BLK
SKU2 l 2X BLK
SKU3 l 2X BLK
SKU1 h 2X BLK
SKU2 h 2X BLK
SKU3 h 2X BLK
The beauty (and fun) of this solution is of course that it holds in just one line of code (in pure Perl, without using a module to do the work behind the scene).
There are a number of downsides to this solution, however: first, it is far less easy to understand, it is actually hardly readable. Even though I just wrote it, I am not sure how I would explain it to make it clearly understandable.
To tell the truth, it was also a bit complicated for me to write it: it took me about 3 minutes to write the foreach nested loops above (which I did not even need to test), and and it took me slightly more than half an hour to get the nested map function calls to work correctly. So, in brief, this was just for the fun, I do not recommend this solution.