On Fri, 2002-04-26 at 14:51, Jason Frisvold wrote: > Hrm.. I'll run some tests with it and see what I find out... Sounds > promising if it really is a preprocessor... So does it just do > something along the lines of a cat <file> | grep -v <stuff> and then > execute the output? (I realize that is simplifying it by a great deal) > > I'm just trying to wrap my head around this... The program (actually > programs) that I've been writing runs anywhere from once every 5 minutes > to once a night... I know I can make it faster by porting to C, but > it's that much easier to do in perl. However, I don't want to waste > cycles running through a preprocessor every time, or running through a > debug routing every time when it's not needed... > > Hrm... more thought needed.. *grin* > > --------------------------- > Jason H. Frisvold > Senior ATM Engineer > Engineering Dept. > Penteledata > CCNA Certified - CSCO10151622 > friz@corp.ptd.net > --------------------------- > "Imagination is more important than knowledge. Knowledge is limited. > Imagination encircles the world." -- Albert Einstein [1879-1955] It will run through the filter every time it is executed so a program with a filter will be slower than a program without a filter. Filters work by using BEGIN blocks and some really neat backend magic. Here is an example filter (with new comments) I wrote based on your earlier email. In fact, come to think of it, if you reverse the import and unimport subs, reverse substitution (s//^#/), and remember to comment out the debug code your production code will run a top speed and your debug code will be a little slower instead of the other way around. #name the module package DEBUG; #all of the magic comes from this module use Filter::Util::Call; #minor magic that makes warns and dies report as if the code #were in the calling file use Carp; #unimport gets called when you say "no MODULENAME;" #I am using it here for my main filter because I #want to be able to say "no DEBUG;" instead of #"use DEDEBUG;" or other negative name. sub unimport { #grab the args passed into the module (ignore) my ($type, @other_args) = @_; #this variable determines whether we are in #a chunk of code that needs to be commented my $in_debug = 0; #filter_add sets up the filter. There are two #ways to use it, I am using the closure method #because I think closures rock. The anonymous #subroutine I define here will be called until #there is no more data is left in the file, an #error occurs, or the filter_del sub is called filter_add (sub { #this command reads a line from the source #and stores it in $_. $status is set to 0 #if there are no more lines, 1 for success #or to a negative number for failure my $status = filter_read; #If we are in a #DEBUG ON block and the file #ends then we have a problem; better to fail #than to screw up the script croak "unbalanced '#DEBUG'" if $status == 0 and $in_debug; #if the line starts with #DEBUG ON then #we need to start commenting out lines if (/^\s*#DEBUG ON/) { #warn the user that nesting #DEBUG ONs #can be dangerous (bad things can happen #if you combine "use DEBUG;", "no DEBUG;", #and nested #DEBUG ONs). We increment #$in_debug so that we know how deeply we #are nested (there must be a matching #number of #DEBUG OFFs). carp "nested #DEBUG ON is dangerous" if ++$in_debug > 1; } #else if the line contains #DEBUG OFF then we need to stop #commenting out lines. We decrement $in_debug for the #same reason we incremented it above. elsif (/^\s*#DEBUG OFF/) { #if there are more #DEBUG OFFs than #DEBUG ONs #then we have a serious problem. croak "unbalanced '#DEBUG'" if --$in_debug < 0; } #else if we are currently in a debug block then prepend #a comment character to the line elsif ($in_debug) { s/^/#/; } #return the status return $status; }); } #the import subroutine gets called when you "use MODULENAME;". #I am using it here to turn off the filter. sub import { filter_del(); } #modules must return true. 1; -- Today is Sweetmorn the 43rd day of Discord in the YOLD 3168 Grudnuk demand sustenance! Missile Address: 33:48:3.521N 84:23:34.786WThread Previous | Thread Next