in reply to Re^2: Hidden features of Perl
in thread Hidden features of Perl
Originally, a crude name was proposed for this operator, as indicated by this response from BooK to Sebastien Aperghis-Tramoni:
> Hey Philippe, why don't you give the name we found for @{[]} ?
Because *you* found it, and want to have *my* name associated with it.
To deflect attention from the taboo name, BooK started another fwp thread, suggesting "Baby Cart" ... which was objected to by native English speakers on the grounds they'd never heard it used in everyday speech. Suggested alternatives included "Baby Carriage" and "Pram". Though many other names have been proposed, including:
- Supermarket Trolley
- Luge or Sled
- Fat Brackets
- Pram
- Turtle (update: suggested by Peter Krumins)
- Code Interpolation (update 2021: suggested by the LanX)
- Mexican Sledge (update 2021: suggested by the LanX ... which I sledged :)
- Mexican Sleigh (update 2021: LanX wearing a sombrero, riding a sleigh)
it seems that BooK's quirky Baby Cart has won this fascinating naming war.
BooK References
- Re^7: Ways of quoting (where BooK explains why he chose the Baby Cart name)
- Re^2: Splitting Hairs [tangent to: Splitting in while loop]
- Interview with Philippe Bruhat (August 2015)
Quoting BooK from Interview with Philippe Bruhat (August 2015):
I've been hanging around on the Fun with Perl mailing for a long time, and this is where José Castro started to ask for the names of the most famous secret operators for his OGSOP (Obfuscation, Golfing and Secret Operators in Perl) book project. I came up with the name "baby cart" for @{[]}, and I loved that name so much that I wanted to make sure it would be the one that everyone would use. The only way to do that was to write the reference manual myself...
Early Historical References
- Re: Hidden features of Perl (More Secret Operator References) (Baby cart operator was not "designed" by Larry when he designed Perl, rather it was independently invented by Larry and Randal shortly after Perl 5 was released in 1994 - though it did not have a name back then)
- Re^3: meaning of =()= (where merlyn rues not asking Larry Wall's daughter Heidi to coin a name back in 1994 after Heidi had successfully coined the name for the Spaceship operator <=>)
- "Some Standard Golfing Techniques" section at The Lighter Side of Perl Culture (Part IV): Golf
References Added Later
Comparing Baby Cart with String Interpolation in Other Languages (Golf)
Though usually too long for golf, Baby Cart occasionally features in competitive golf solutions, as you will discover by searching for Baby Cart in the following nodes:
- The golf course looks great, my swing feels good, I like my chances (Part VI)
- Spending Time on Saving Time [golf]
Based on these nodes, consider how to create a "Dear John" string in each of the four languages:
"Dear $name" # Perl and PHP "Dear %s" % expr # Python and Ruby % printf-like operator "Dear {0}".format(expr) # Python format string method "Dear "+`expr` # Python backticks (TMTOWTDI) "Dear #{expr}" # Ruby string interpolation "Dear @{[expr]}" # Perl "Baby Cart" string interpolation "Dear {expr}" # Perl 6 version of Baby Cart (I think)
My 102 stroke Perl solution to the Saving Time challenge used Baby Cart to create a printf format string on the fly:
printf"%@{[.1*vec'XXXXXXXXXXXX',$_,8]}s",($_^$`%12?g:p)&($_^$'/5?g:u)| +"H "for map{$_,11-$_}<>!~/:/..5
What's the shortest way to create this peculiar printf format string from an expression (expr) in each of the four languages?
Technique | Perl | Ruby | Python | PHP |
---|---|---|---|---|
String interpolate | "%@{[expr]}s" | "%#{expr}s" | "%%%ds"%expr | ~X.expr.s |
Number of strokes | 13 | 11 | 12 | 9 |
where X above is the character with ord value 218. Poor old Baby Cart baby-stepped to the finish line in last place in this oddball race. This is hardly surprising given Baby Cart was not really designed; it was independently "invented" shortly after Perl 5 was released in 1994 by both L.Wall and R.Schwartz ... and later celebrated as one of Perl's secret operators.
Updated: Many changes were made and extra references added long after the original response was made.