in reply to Re^3: writing a pragma
in thread writing a pragma

is there a way to write a module to work like strict. so that does something at compile time?

Replies are listed 'Best First'.
Re^5: writing a pragma
by salva (Canon) on Apr 26, 2014 at 06:30 UTC
    In Perl it is easy to do things at compile time. You have BEGIN for that.

    A different mater is changing how the program is compiled. perl provides some hooks for doing it, but AFAIK, it must be done at the C level and requires a pretty good knowledge of the internals. See perlguts.

Re^5: writing a pragma
by tobyink (Canon) on Apr 26, 2014 at 07:18 UTC

    That really depends on exactly what you want to do at compile time, doesn't it? Some things are easier than others.

    use Moops; class Cow :rw { has name => (default => 'Ermintrude') }; say Cow->new->name

      I want to write a pragma, which reads the contents of file where it is imported.

      1. use mypragma;

      2. use Data::Dumper;

      3. my $hash = {1,2,3,4,5,6}

      4. print Dumper $hash;

      I want to get the lines from 2,3,4 into the mypragma which was loaded into memory for this program.

      I am not sure that this is possible, I just want to try.

        sure its possible, but such a thing shouldn't be a pragma :) see caller and open and import and splice and zentara package/module tutorial....

        use NotAPragma; ...

        NotAPragma.pm

        package NotAPragma; sub import { my ($package, $filename, $line) = caller; open my($infh), '<:raw', $filename or die "Can't open caller $filename : $!"; my @lines = ( 'pad', readline $infh ); close $infh; splice @lines, 0, $line; print "@lines\n"; ## << this is the ... after use NotAPragma; } 1;