Source Filters”

Source Filters”

Perl “Source Filters” 1 Source Filters What are “Source Filters” How to use them What can you use them for Some examples of CPAN modules which use them Things to watch out for when using Source Filters 2 What are Source Filters ? Source filters alter the program text of a module before Perl sees it Similar to C Preprocessor The original purpose of source filters was to let you encrypt your program source to prevent casual piracy 3 How to use Source Filters Three ways : 1. You can write it in C, 2. Use an external program as a filter 3. Write the filter in Perl I will deal with writing a filter in Perl 4 Filter::Util::Call Filter::Util::Call is the old way package Whatever; use Filter::Util::Call; sub import { filter_add(); } sub filter { .. change $_ .. } ; 5 Filter::Simple Filter::Simple is the new better way package MyFilter; use Filter::Simple sub { .. alter $_ .. } or package MyFilter; use Filter::Simple; FILTER { .. do something with $_ .. } 6 Case Study - Trace.pm A tracing Module which prints out tracing info based on the contents of $ENV{TRACE} package Trace; use Env qw/ $TRACE /; use vars qw($VERSION $AUTOLOAD); sub AUTOLOAD { $AUTOLOAD =~ /.*::(\w+)/ or die "No such subroutine: $AUTOLOAD"; output_message("Trace::$1", @_) if trace_this($1); } sub trace_this { my ($trace_what) = @_; return 0 unless defined $TRACE; return $TRACE =~ m/\b($trace_what)\b/i; } sub output_message { my ($trace, @message) = @_; print join(“:”, @_), “\n”; } #!/usr/bin/env perl use Trace; Trace::WHATEVER(“A Message”); 7 What can go wrong ? Consider: foreach (1 .. 10000) { Trace::SOMETHING(“a message”); } Each time through the loop, the contents of $ENV{TRACE} is examined to decide whether to out a message or not 8 How can Source Filters help ? package Trace; use strict; use warnings; use Env qw/ $TRACE /; $TRACE =~ s/,/|/g; # replace commas with pipe for regex use Filter::Simple sub { s/Trace::/#race::/g; s/#race::($TRACE)/Trace::$1/g; } Now all the Trace::WHATEVER lines are commented out apart from those in $ENV{TRACE} 9 CPAN Modules which use Source Filters Acme-Abuse Backtick-AutoChomp Lingua-Romana-Perligata Perl6-Export Acme-Aspartame Blosxom-Debug Sub-Quotelike Lingua-Shakespeare Perl6-Parameters Acme-Beatnik Blosxom-Include Sub-Regex Lingua-Sinica-PerlYuYan Perl6-Perldoc-v0.0.2 Acme-BottomsUp Cac Sub-Signatures Lingua-Tolkien-BURL Perl6-Perldoc-v0.0.3 Acme-Brainfuck Cache-Cascade SuperPython Log-Easy Perl6-Perldoc-v0.0.4 Acme-ButFirst Call-Immediate Switch Logic Perl6-Perldoc-v0.0.5 Acme-Canadian CatalystX-Imports Test-AtRuntime MOP Perl6-Placeholders Acme-ComeFrom Class-HPLOO Test-Cookbook Macrame Perl6-Pugs Acme-Comment Class-Root Test-HTTP Macro Perl6-Rules Acme-Currency Class-Workflow Test-LectroTest Mail-FilterXML Perl6-Subs Acme-Echo Code-Dumper Test-MultiFork Markup-Perl Perl6-Variables Acme-Filter-Kenny Config-Vars Test-Standalone Module-Compile Plagger Acme-Gosub Crypt-License Text-RewriteRules Moose PlusPlus Acme-Hyperindex Crypt-Util Thread-Synchronized MooseX-POE Poem Acme-Lingua-NIGERIAN Data-Dumper-Simple Tie-VecArray Net-IP-Match Querylet Acme-Lingua-Pirate-Perl DateTime-Event-Klingon Toolkit Net-SIP Ruby Acme-Lingua-Strine-Perl Debug-Mixin Unicode-Overload OOPS SQL-Interpolate Acme-Metification Decode-Source Weed ObjectivePerl SQL-Preproc Acme-No Devel-StealthDebug XML-Filter-Essex PDL SWISH-Filter Acme-Pythonic Devel-XRay XML-XSH PDL-NiceSlice Semi-Semicolons Acme-Rant Easy-Log XML-XSH2 PHP-Include Shell-POSIX-Select Acme-Sub-Parms Embperl Yada-Yada-Yada POE SiePerl Acme-Tiroler Error-TryCatch fields-aliased POE-Component-Client-FTP Smart-Comments Acme-Ukrop ExtUtils-configPL forks POE-Component-Jabber Smart-Comments-v1.0.2 Acme-Valid For-Else htpl POE-Component-OSCAR Smart-Comments-v1.0.3 Acme-Your Gimp-ScriptFu-Client ifdef POE-Filter-XML Spiffy Apache-AntiSpam IfLoop interface Parse-Native String-RexxStack Apache-Clickable Inline-Files kurila Perl-Unsafe-Signals Sub-Lambda Apache-XPP Inline-YAML namespace-clean Perl6-Attributes Sub-Lexical Attribute-Handlers-Prospective Language-Indonesia Perl6-Binding Sub-Methodical AxKit Lexical-Attributes 10 Things to watch out for Line numbers Introducing syntax errors in your filter 11.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    11 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us