Python and Ruby

John Bokma john at
Wed Feb 3 06:29:21 CET 2010

Jonathan Gardner <jgardner at> writes:

> On Feb 1, 6:36 pm, John Bokma <j... at> wrote:


>> It should be $bar = \&foo
>> Your example actually calls foo...
> I rest my case. I've been programming perl professionally since 2000,
> and I still make stupid, newbie mistakes like that.

Uhm, in another post you wrote that you could explain Python in an hour
to an experienced programmer and you *still* make mistakes like that in

By the way, the language is called Perl. If you write "I've been
programming perl" in a Perl related group some people might read it as
that you've been working on the internals of the perl executable (in C)

>> > One is simple, consistent, and easy to explain. The other one requires
>> > the introduction of advanced syntax and an entirely new syntax to make
>> > function calls with references.
>> The syntax follows that of referencing and dereferencing:
>> $bar = \@array;       # bar contains now a reference to array
>> $bar->[ 0 ];          # first element of array referenced by bar
>> $bar = \%hash;        # bar contains now a reference to a hash
>> $bar->{ key };        # value associated with key of hash ref. by bar
>> $bar = \&foo;         # bar contains now a reference to a sub
>> $bar->( 45 );         # call sub ref. by bar with 45 as an argument
>> Consistent: yes. New syntax? No.
> Except for the following symbols and combinations, which are entirely
> new and different from the $@% that you have to know just to use
> arrays and hashes.
> \@, ->[ ]

@array, one item: $array[ 1 ];
$arrayref, one item: $arrayref->[ 1 ];

> \%, ->{ }

%hash, one item: $hash{ key };
hence: $hashref, one item: $hash->{ key }

> \&, ->( )

should now be clear ;-)

You *should* have no problem with that if you have been
programming professionally Perl since 2000 IMNSHO. Otherwise print my
post or copy it on a post-it note ;-).

Remember that all this was added to Perl in version 5. So it had to be
added in a way that wouldn't break Perl 4. Perl is, in my experience
quite good in backwards compatibility. Quite some Perl modules on CPAN
work from 5.00x-5.10 and most likely will work without trouble in 5.12.

> By the way:
> * How do you do a hashslice on a hashref?

I will reply like it's a genuine question, and not like "Oh, look, how
silly Perl works". I don't care about that much. I do like Perl and am
starting to like Python.

@$hashref{ 'key1', 'key2', 'key3' };

> * How do you invoke reference to a hash that contains a reference to
> an array that contains a reference to a function?

I guess you mean:

$hashref->{ key }[ index ]( arguments );

The long version is:

$hashref->{ key }->[ index ]->( arguments );

[ Python advocacy snipped]

> I'd rather think of the task at hand than what each of the funky
> symbols on my keyboard mean.

Then just quit programming Perl ;-) Perl has always come naturally to
me, no idea why. Recently I said to a close friend:

Python is like my desk, which I prefer to keep clean and neat.
Perl is like my livingroom, which I prefer to keep clean and neat to
some extend, but some mess is allowed. For example, the cat can be
there. Toys of my daughter are allowed to be all over the place. A
pleasant mess, but not too much.

I won't repeat what I said about PHP ;-).

John Bokma                                                               j3b

Hacking & Hiking in Mexico - - Perl & Python Development

More information about the Python-list mailing list