So I was on #cgiapp (irc.perl.org) and Cees Hek taught me a few things, one involving lists, arrays and scalars.
Have you ever tried this?
@a=('one','two','three'); $b = @a; print $b;
So what's the output? '3'
$b = ('one','two','three');print $b;
What's that output? '3'?
insert sound of head exploding
Before moving on, I think this is a good example of how such a truth of life can really alter your worldview. Not just in Perl, but when you learn something new like that, it really breaks your grip on "reality" and takes a moment (or two) to readjust and get a new grip. I encourage a good shake-up every once in a while.
Ok, so then I was head-coding while playing with Meredith (she's so cute), getting around a CSV file that I will need to import into a database and it has rows with ID #'s and then a column in a row for other ID #'s that are the same 'entity'. So I plan on consolidating them into my shiny new relational db. So I'll need something to determine if the ID # is the minimal # of the set - if so, it's a new 'entity' record. Otherwise, associate the new record w/ the minimal number.
So I'll have the ID # and a list of other ID #'s and I need to know if it's the smallest.
So then I said to myselfif ( $id_number == reverse sort @ids )
There are some context issues there that I couldn't (and still don't all that well) understand. Cees nailed it, though:if ( $id_number == @{[reverse sort @ids]}[0..$#ids] )
Pretty cool, huh? I call it the Hek-Purdy min(). Or maybe "a Hek of a Purdy-good min() function" (helps if you say that in a Southern accent
Now this is not very readable or maintainable, so I don't plan on world-wide deployment - just my import script
Peace,
Jason
Why so convoluted? Use a literal slice! (Score:2)
Re:Why so convoluted? Use a literal slice! (Score:2)
Peace,
Jason
min() (Score:2)
That code is very confusing. Sorta like taking a flight from NY to LA by via Johannesburg and Perth. Why not just grab the smallest element of the list?
If you needed to avoid List::Util for some odd reason, I don't know why you would sort a list, reverse it and take the last element (in a most convoluted fashion) when you could just:
Re:min() (Score:2)
Hmmm -- maybe this won't even see the light of day in my import script now.
Peace,
Jason
Re: (Score:1)
I thought it was common knowledge that there is no such thing as a list in scalar context. :-)
The context issues are particularly important when you
returnthings.my $foo = bar();will produce a different result with abarfunction that doesreturn @arr;vs one that doesreturn ( $baz1, $baz2, $baz3 ). This is even more insidious if you do something likereturn grep quux($_), @arr.Always mind your context.
Your particular example, btw, besides all the issues already pointed out by others, should at l