En op zeventien oktober tweeduizendtwee sprak (-ugene: > So what rule are they using to score their solutions? I don't know. The arbiter in this game is mjd and he has yet to deliver a verdict. If I were arbiter, however, I would declare the winner without hesitation as Eugene van der Pijll, with (sic):
sub subst { my $a; join '', map {++$a%2 ? $_ : eval} split /(\$\d+)/, shift; } You can't help but admire all that lovely white space -- and, look! he used shift instead of pop. Seeing (-ugene do that was almost as surreal as watching `/anick favour the eccentric 'length' over the normal 'y///c'. If Brother van der Pijll is not declared the winner, I vote that we declare war on the perl-qotw mailing list. It may be too soon to start golfing this, but a more normal interpretation of (-ugene's brilliancy is something like: sub subst{join'',map--$|?$_:eval,split/(\$\d+)/,$_[$|=0]} if you allow the subroutine to mangle $| (admittedly dubious). Can anyone do better? Original problem specification: --------------------------------------------------------------------- Write a subroutine, 'subst', which gets a string argument, $s. It should search $s and replace any occurrences of "$1" with the current value of $1, any occurrences of "$2" with the current value of $2, and so on. For example, if $1, $2, and $3 happen to be "dogs", "fish" and "carrots", then subst("$2, $1 and $3") should return "fish, dogs, and carrots" --------------------------------------------------------------------- Note: You should not mangle other stuff in the string, otherwise the solution would be a trivial subst{eval"\"@_\""}. /-\ http://careers.yahoo.com.au - Yahoo! Careers - 1,000's of jobs waiting online for you!