http://qs321.pair.com?node_id=383764


in reply to (CLPM) reorder via swap

Without using swap, we have a slightly less obfuscated and (uninteresting) way...

@array = qw(put these in a different order); @order = qw(1 3 5 4 2 0); print reorder(\@array, \@order); sub reorder() { #23456789012345678901234 map${@_[0]}[$_],@{$_[1]} }

Uninteresting as it may be, it might make for a decent golf... Can this be done in fewer strokes?

What if the input were two strings on <STDIN>, separated by a line feed? We then might have something like:

#!/perl -ln0a map$F[$_],@F[@F/2..$#F]

Replies are listed 'Best First'.
Re^2: (CLPM) reorder via swap
by japhy (Canon) on Aug 17, 2004 at 21:09 UTC
    Assuming we want to return a list in the ordered fashion:
    sub reorder { #234567890123456 @{+pop}[@{+pop}] }
    I'm taking an array slice instead of using map(). And we can get even shorter if we call it as reorder(@elements, \@neworder):
    sub reorder { #2345678901 @_[@{+pop}] }
    _____________________________________________________
    Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
    How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart

      Beautiful and elegant... it's simplicity like this that always reminds me why I love this language.

      But please help me out a little. What is the + operator doing here? I know that @{+pop} is somehow saying the same as @{pop()}, but I'm not sure why. ...And while I'm on the subject, why am I not allowed to simply say @{pop} (besides the fact that I've used a split infinitve)?

        When you say @{bareword}, Perl doesn't do anything to the bareword, and thinks you're just enclosing the variable name in braces. The reason this is useful is when you're printing something like "the ${n}th time", where you want $n, not $nth.

        The + here disambiguates things; it tells Perl that this is not just a "roped-off" variable name, it's an expression to be evaluated.

        _____________________________________________________
        Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
        How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart