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 ?)
In reply to Syntax question about closures and Perl 'sort' by dwm042
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |