![]() |
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. |
Re: How do I call sort with an anonymous subroutine stored in a hash ??
Casey <mail@nowhere.com> wrote in message news:<pan.2004.01.30.07.28.21.56357@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. |
Re: How do I call sort with an anonymous subroutine stored in a hash ??
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 <mail@nowhere.com> wrote in message news:<pan.2004.01.30.07.28.21.56357@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. |
Re: How do I call sort with an anonymous subroutine stored in a hash ??
On Fri, 30 Jan 2004 04:03:25 -0800, nobull wrote:
> Casey <mail@nowhere.com> wrote in message news:<pan.2004.01.30.07.28.21.56357@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. |
| All times are GMT. The time now is 08:37 AM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.