mem - use "in-mem" pkgs & force definitions into mem early
Version "0.4.0"
use mem; use mem(@COMPILE_TIME_DEFINES=qw(a b c));
mem is a trivial pragma to either allow defining the module it is included from as being defined so that later classes or packages in the same file can use the package to pull in a reference to it, or to be able to call its import routine from a different package in the same file.
mem
use
With parameter assignments or other actions, it forces those assignments to be done, immediately, at compile time instead of later at run time. It can be use, for example, with Exporter, to export typed-sub's among other usages.
Following, is a sample program, showing two uses of mem.
use strict; use warnings; { package Ar_Type; # use mem; #1st usage our (@EXPORT, @ISA); sub ARRAY (;*) { my $p = $_[0]; my $t="ARRAY"; return @_ ? (ref $p && (1+index($p, $t))) : $t; } # use mem( #2nd usage @EXPORT=qw(ARRAY), @ISA=qw(Exporter) # ) #(also) 2nd usage ; use Exporter; } package main; use Ar_Type; use P; my @a=(1,2,3); my ($ed, $light); (@$ed, @$light) = (@a, @a); #ed & light point to copies of @a bless $ed, "bee"; P "\@a = ref of array" if ARRAY \@a; P "ref of ed is %s", ref $ed; P "ed still points to underlying type, 'array'" if ARRAY $ed; P "Is ref \$light, ARRAY?: %s", (ref $light eq ARRAY) ? 'yes':'no'; P "Does \"ref \$ed\" eq ARRAY?: %s", (ref $ed eq ARRAY) ? 'yes':'no'; P "%s", "# (Because \"ref \$ed\" is really a bless \"ed\" bee)"
@a = ref of array ref of ed is bee ed still points to underlying type, 'array' Is ref $light, ARRAY?: yes Does ref $ed eq ARRAY?: no # (Because ref "ed" is really a bless "ed" bee)
use mem
Can't locate Ar_Type.pm in @INC (@INC contains: /usr/lib/perl5/5.16.2 ... /usr/lib/perl5/site_perl .) at /tmp/ex line 18. BEGIN failed--compilation aborted at /tmp/ex line 18.
use mem;
Bareword "ARRAY" not allowed while "strict subs" in use at /tmp/ex line 27. syntax error at /tmp/ex line 27, near "ARRAY \" Bareword "ARRAY" not allowed while "strict subs" in use at /tmp/ex line 30. Bareword "ARRAY" not allowed while "strict subs" in use at /tmp/ex line 31. Execution of /tmp/ex aborted due to compilation errors.
The first usage allows 'main' to find package Ar_Type, already in memory rather than forcing a library search for it. By default perl doesn't recognize modules already defined in the same file.
main
package Ar_Type
The second usage allows the function prototype and definition of 'ARRAY' to be exported in time for use in 'main'. Without it, You could still call ARRAY, but would have to use an ambersand or parens after the subroutine name. By forcing ISA and EXPORT to be defined before Exporter is called, Exporter can export the symbols in time for main AND their prototypes.
ARRAY
me::inlined (alpha release ))
To install mem, copy and paste the appropriate command in to your terminal.
cpanm
cpanm mem
CPAN shell
perl -MCPAN -e shell install mem
For more information on module installation, please visit the detailed CPAN module installation guide.