All of this is supposition since I can't see anything you haven't shown us.
It sounds like this code is part of a larger program that is going to call do "EPrints"; which will bring the source of EPrints into the larger program. The $c variable is probably setup there. What the code in EPrints is doing is setting up a handler named can_request_view_document. At some point in the larger program, it is going to say something like my $document = $r->param(doc); my $can_request = $c->{can_request_view_document}->($document, $r); return 403, "You are not allowed to access $document" unless $can_request; return 400, "$document doesn't exist" unless -f $document; return 200, $document; On Fri, Jul 20, 2018 at 11:06 AM James Kerwin <jkerwin2...@gmail.com> wrote: > Afternoon all, > > I have been asked to take a look at a .pl file which is part of a set-up > called "EPrints". The particular file controls who can access documents on > a server. > > Excluding some comments, the file starts like: > > $c->{can_request_view_document} = sub > { > my( $doc, $r ) = @_; > > It then goes on to complete the subroutine and return a value. > > I understand that $doc and $r are populated via @_ but I have never before > seen the structure of the first line starting with "$c". Additionally, the > file doesn't look like a typical Perl file (eg.#!/usr/bin/perl -w at the > top and some use statements). > > I know it's very vague, but could anybody explain this syntax to me? My > suspicion is that something else is calling the subroutines in this file? > Am I at least on the right track? > > Thanks, > James >