http://www.perlmonks.org?node_id=478525


in reply to Error location in Filter-Include

This is where your requested feature will come in handy:
use Filter::Include post => sub { $_[1] = "#line $Filter::Include::LINE $_[0]\n$_[1]"; };
So this will modify the currently filtered code to add the name of the file being included. This means that when you get the syntax error it will also include the filename the error occurred in. This code is untested, btw, so don't be surprised if it doesn't work off the bat.
HTH

_________
broquaint

Replies are listed 'Best First'.
Re^2: Error location in Filter-Include
by mosh (Scribe) on Jul 27, 2005 at 11:58 UTC
    Thanks broquaint !

    Although, I'm not sure I understand what you have written. Can you describe in words what's the aim of each element ?

    What's the meaning of the "post =>" ?
    What is the meaning of "sub (" without the subname ?
    What should be in $_[0] and $_1] ?
    What's the meaning of "$Filter::Include::LINE" ?

    Thanks, again,

    Mosh

      Ah, well, that's quite a lot to explain, but I shall take your questions one at a time:
      What's the meaning of the "post =>" ?
      Here the => operator, commonly known as the fat comma is simply "stringifying" (i.e turning the bareword post into a string) its left-hand side argument, which in this case is post. For more information on the fat comma see. perlop. Looking at it from a higher level it is also specifying that the post handler is being provided. For information on Filter::Include's handlers see. the HANDLERS section.
      What is the meaning of "sub (" without the subname ?
      When sub is used without a name it is creating an anonymous sub and so is acting as an anonymous subroutine constuctor. This means that it will create a subroutine and return a reference to that subroutine. It is anonymous by virtue of the fact that it can be only referred to by its reference and not its name, which is orthogonal to the anonymous array ([]) and anonymous hash ({}) constructors. For more information on anonymous subroutines see. perlsub.
      What should be in $_[0] and $_[1] ?
      As documented in the HANDLERS. section of Filter::Include the first argument ($_[0]) will contain the name of the file or module being included and the second argument ($_[1]) will be the code that has just been filtered.
      What's the meaning of "$Filter::Include::LINE" ?
      This was a little more subtle and is not currently documented in Filter::Include, which I apologise for. It holds the current line number as of the last include. This should definitely be documented and perhaps better exposed through the API. Your post definitely gave me pause for thought about how your problem could solved nicely and if it should in fact be part of the module as it certainly looks to be a handy feature. Perhaps, again, it could be implemented as another option to import. Thanks for your input, it is, as always, much appreciated.
      HTH

      _________
      broquaint