dwm042 has asked for the wisdom of the Perl Monks concerning the following question:
However when working on some code to sort DNS resource records (previously stored in a HoA), the syntax below works and using $sortby->() doesn't:my $function_ref = my_closure($stuff); for ( my $data = $function_ref->() ) { # do things }
The error I get when using $sortby->() is as follows (line number changed to correspond to the above sample):for ( qw{ NS MX TXT HINFO SPF SRV A CNAME PTR } ) { if ( exists $dns_records{$_} ) { print_header("$_"); my $sortby = setsort($_); for my $rec ( sort $sortby @{$dns_records{$_}} ) { print $rec, "\n"; } } } sub setsort { my $type = shift; return sub { $a <=> $b } if ( uc($type) eq "PTR" ); return sub { $a cmp $b }; }
Partial answer while writing this question -- sort's BLOCK is an anonymous code reference, and $sortby is also an anonymous code reference. $sortby->() is a dereferenced function reference, which isn't what sort wants at all.Array found where operator expected at ./sample.pl line 5, at end of l +ine (Missing operator before ?)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Syntax question about closures and Perl 'sort'
by shmem (Chancellor) on Apr 03, 2009 at 21:06 UTC | |
|
Re: Syntax question about closures and Perl 'sort'
by jethro (Monsignor) on Apr 03, 2009 at 21:21 UTC | |
by dwm042 (Priest) on Apr 03, 2009 at 22:40 UTC | |
by shmem (Chancellor) on Apr 03, 2009 at 23:55 UTC | |
by jethro (Monsignor) on Apr 03, 2009 at 23:38 UTC | |
by tilly (Archbishop) on Apr 04, 2009 at 04:41 UTC | |
by jethro (Monsignor) on Apr 05, 2009 at 18:43 UTC | |
by Marshall (Canon) on Apr 05, 2009 at 05:28 UTC |