467,923 Members | 1,252 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 467,923 developers. It's quick & easy.

How do I call sort with an anonymous subroutine stored in a hash ??

Hi, I haven't being using perl for too long. Can someone explain the
correct way to get the sort function to recognize an anonymous function
declared as a hash value? Look at my sample code for clarification:

#!/usr/bin/perl

@my_array = qw( g a z f u q m i e b );
$hash{my_sort_sub} = sub { $a cmp $b };
$hash{test_routine} = sub { print "test_routine works\n" };
&{$hash{test_routine}};
print @my_array;
print "\n";
print( sort &{$hash{my_sort_sub}} @my_array );
print "\n";
The code fails to compile with error:

Array found where operator expected at ./test.pl line 9, near "} "
(Missing operator before ?)
syntax error at ./test.pl line 9, near "} @my_array "
Execution of ./test.pl aborted due to compilation errors.

Help! I don't see what's wrong with this.

Jul 19 '05 #1
  • viewed: 2424
Share:
3 Replies
Casey <ma**@nowhere.com> wrote in message news:<pa***************************@nowhere.com>.. .
Can someone explain the
correct way to get the sort function to recognize an anonymous function
declared as a hash value?
AFAIK, you cannot. It's one of those nasty corners of Perl syntax
where to do the "right thing" would require unlimited lookahead (or
roll-back) in the parser. Perl doesn't even try - it's just
documented as a limitation.
print( sort &{$hash{my_sort_sub}} @my_array );
my $sort_sub = $hash{my_sort_sub};
print( sort $sort_sub @my_array );
Array found where operator expected at ./test.pl line 9, near "} "
(Missing operator before ?)
syntax error at ./test.pl line 9, near "} @my_array " Help! I don't see what's wrong with this.


The syntax of the Perl sort function is explained in

perldoc -f sort

This newsgroup does not exist (see FAQ). Please do not start threads
here.
Jul 19 '05 #2
you are dereferencing the anonymous subroutine incorrectly.

On line 9 you have:
print( sort &{$hash{my_sort_sub}} @my_array );

It should be:
print( sort {&{$hash{my_sort_sub}}} @my_array );

hope this helps,
Anthony

Casey <ma**@nowhere.com> wrote in message news:<pa***************************@nowhere.com>.. .
Hi, I haven't being using perl for too long. Can someone explain the
correct way to get the sort function to recognize an anonymous function
declared as a hash value? Look at my sample code for clarification:

#!/usr/bin/perl

@my_array = qw( g a z f u q m i e b );
$hash{my_sort_sub} = sub { $a cmp $b };
$hash{test_routine} = sub { print "test_routine works\n" };
&{$hash{test_routine}};
print @my_array;
print "\n";
print( sort &{$hash{my_sort_sub}} @my_array );
print "\n";
The code fails to compile with error:

Array found where operator expected at ./test.pl line 9, near "} "
(Missing operator before ?)
syntax error at ./test.pl line 9, near "} @my_array "
Execution of ./test.pl aborted due to compilation errors.

Help! I don't see what's wrong with this.

Jul 19 '05 #3
On Fri, 30 Jan 2004 04:03:25 -0800, nobull wrote:
Casey <ma**@nowhere.com> wrote in message news:<pa***************************@nowhere.com>.. .
Can someone explain the
correct way to get the sort function to recognize an anonymous function
declared as a hash value?


AFAIK, you cannot. It's one of those nasty corners of Perl syntax
where to do the "right thing" would require unlimited lookahead (or
roll-back) in the parser. Perl doesn't even try - it's just
documented as a limitation.
print( sort &{$hash{my_sort_sub}} @my_array );


my $sort_sub = $hash{my_sort_sub};
print( sort $sort_sub @my_array );
Array found where operator expected at ./test.pl line 9, near "} "
(Missing operator before ?)
syntax error at ./test.pl line 9, near "} @my_array "

Help! I don't see what's wrong with this.


The syntax of the Perl sort function is explained in

perldoc -f sort

This newsgroup does not exist (see FAQ). Please do not start threads
here.


Thanks for the solution. Have a good day.

Jul 19 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by Mark | last post: by
1 post views Thread by Rusty | last post: by
7 posts views Thread by DC Gringo | last post: by
reply views Thread by Bob | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.