Interesting talk on Python vs. Ruby and how he would like Python to have just a bit more syntactic flexibility.

John Bokma john at castleamber.com
Wed Feb 17 21:23:19 EST 2010


Steven D'Aprano <steven at REMOVE.THIS.cybersource.com.au> writes:

> On Wed, 17 Feb 2010 12:39:30 -0600, John Bokma wrote:

[..]
 
>> If it was Perl [1], I doubt it. Because line numbers are reported, and
>> if that doesn't help you, you can annotate anonymous functions with a
>> nick name using
>> 
>> local *__ANON__ = 'nice name';
> [...]
>> As you can see, and a line number is generated, and the nice name is
>> shown.
>
> Given that it has a nice name, what makes it an anonymous function?

You can't do 

nice name();

It just changes what perl reports.

> If this is the case, then your answer to "anonymous functions are a
> PITA" 

I don't think anon functions are in general a
PITA. Like with most things, (I) use them in moderation.

> is "don't use anonymous functions", which exactly the same answer we'd 
> give here in Python land. The only difference is that Perl provides two 
> ways of making a named function, and Python only one[1].

Note that the local trick doesn't create a named function. There are
other ways of course to create named functions in Perl, e.g.

perl -e '*foo=sub { print "hello, world\n" }; foo();'

Which can be fun:

perl -e '
sub AUTOLOAD {
    my $name = our $AUTOLOAD;
    *$AUTOLOAD = sub { local $" = ", "; print "$name(@_)\n" };
    goto &$AUTOLOAD;
}
foo(40);
bar("hello", "world!");
baz(foo(10));'

output:

main::foo(40)
main::bar(hello, world!)
main::foo(10)
main::baz(1)

NB: calling foo 10 returns 1 (return value of print).

-- 
John Bokma                                                               j3b

Hacking & Hiking in Mexico -  http://johnbokma.com/
http://castleamber.com/ - Perl & Python Development



More information about the Python-list mailing list