1Perl::Stripper(3) User Contributed Perl Documentation Perl::Stripper(3)
2
3
4
6 Perl::Stripper - Yet another PPI-based Perl source code stripper
7
9 This document describes version 0.10 of Perl::Stripper (from Perl
10 distribution Perl-Stripper), released on 2017-07-11.
11
13 use Perl::Stripper;
14
15 my $stripper = Perl::Stripper->new(
16 #maintain_linum => 1, # the default, keep line numbers unchanged
17 #strip_ws => 1, # the default, strip extra whitespace
18 #strip_comment => 1, # the default
19 #strip_pod => 1, # the default
20 strip_log => 1, # default is 0, strip Log::Any log statements
21 );
22 $stripped = $stripper->strip($perl);
23
25 This module is yet another PPI-based Perl source code stripper. Its
26 focus is on costumization and stripping meaningful information from
27 source code.
28
30 maintain_linum => BOOL (default: 1)
31 If set to true, stripper will try to maintain line numbers so they do
32 not change between the unstripped and the stripped version. This is
33 useful for debugging.
34
35 Respected by other settings.
36
37 strip_ws => BOOL (default: 1)
38 Strip extra whitespace, like indentation, padding, even non-significant
39 newlines. Under "maintain_linum", will not strip newlines.
40
41 Not yet implemented.
42
43 strip_comment => BOOL (default: 1) | CODE
44 If set to true, will strip comments. Under "maintain_linum" will
45 replace comment lines with blank lines.
46
47 Shebang line (e.g. "#!/usr/bin/perl", located at the beginning of
48 script) will not be stripped.
49
50 Can also be set to a coderef. Code will be given the PPI comment token
51 object and expected to modify the object (e.g. using "set_content()"
52 method). See PPI::Token::Comment for more details. Some usage ideas:
53 translate comment, replace comment with gibberish, etc.
54
55 strip_log => BOOL (default: 1)
56 If set to true, will strip log statements. Useful for removing
57 debugging information. Currently supports Log::Any and Log::ger and
58 only looks for the following statements:
59
60 $log->LEVEL(...);
61 $log->LEVELf(...);
62 log_LEVEL(...);
63 if ($log->is_LEVEL) { ... }
64 if (log_is_LEVEL()) { ... }
65
66 Not all methods are stripped. See "stripped_log_levels".
67
68 Can also be set to a coderef. Code will be given the PPI::Statement
69 object and expected to modify it.
70
71 These are currently not stripped:
72
73 if (something && $log->is_LEVEL) { ... }
74
75 stripped_log_levels => ARRAY_OF_STR (default: ['debug', 'trace'])
76 Log levels to strip. By default, only "debug" and "trace" are stripped.
77 Levels "info" and up are considered important for users (instead of for
78 developers only).
79
80 strip_pod => BOOL (default: 1)
81 If set to true, will strip POD. Under "maintain_linum" will replace POD
82 with blank lines.
83
84 Can also be set to a coderef. Code will be given the PPI POD token
85 object and expected to modify the object (e.g. using "set_content()"
86 method). See PPI::Token::Pod for more details.Some usage ideas:
87 translate POD, convert POD to Markdown, replace POD with gibberish,
88 etc.
89
91 new(%attrs) => OBJ
92 Constructor.
93
94 $stripper->strip($perl) => STR
95 Strip Perl source code. Return the stripped source code.
96
98 What is the use of this module?
99 This module can be used to remove debugging information (logging
100 statements, conditional code) from source code.
101
102 This module can also be employed as part of source code protection
103 strategy. In theory you cannot hide source code you deploy to
104 users/clients, but you can reduce the usefulness of the deployed source
105 code by removing information such as comments and POD (documentation),
106 or by mangling subroutine/variable names (removing meaningful original
107 subroutine/variable names).
108
109 For compressing source code (reducing source code size), you can try
110 Perl::Squish or Perl::Strip.
111
112 But isn't hiding/protecting source code immoral/unethical/ungrateful?
113 Discussing hiding/protecting source code in general is really beyond
114 the scope of this module's documentation. Please consult elsewhere.
115
116 How about obfuscating by encoding Perl code?
117 For example, changing:
118
119 foo();
120 bar();
121
122 into:
123
124 $src = base64_decode(...); # optionally multiple rounds
125 eval $src;
126
127 This does not really remove meaningful parts of a source code, so I am
128 not very interested in this approach. You can send a patch if you want.
129
130 How about changing string into hexadecimal characters? How about ...?
131 Other examples similar in spirit would be adding extra parentheses to
132 expressions, changing constant numbers into mathematical expressions.
133
134 Again, this does not remove meaningful parts of a source code (instead,
135 they just transform stuffs). The effect can be reversed trivially using
136 Perl::Tidy or B::Deparse. So I am not very interested in doing this,
137 but you can send a patch if you want.
138
140 Please visit the project's homepage at
141 <https://metacpan.org/release/Perl-Stripper>.
142
144 Source repository is at
145 <https://github.com/perlancar/perl-Perl-Stripper>.
146
148 Please report any bugs or feature requests on the bugtracker website
149 <https://rt.cpan.org/Public/Dist/Display.html?Name=Perl-Stripper>
150
151 When submitting a bug or request, please include a test-file or a patch
152 to an existing test-file that illustrates the bug or desired feature.
153
155 There are at least two approaches when analyzing/modifying/producing
156 Perl code: B-based and PPI-based. In general, B-based modules are
157 orders of magnitude faster than PPI-based ones, but each approach has
158 its strengths and weaknesses.
159
160 B::Deparse - strips comments and extra newlines
161
162 B::Deobfuscate - like B::Deparse, but can also rename variables.
163 Despite its name, if applied to a "normal" Perl code, the effect is
164 obfuscation because it removes the original names (and meaning) of
165 variables.
166
167 Perl::Strip - PPI-based, focus on compression.
168
169 Perl::Squish - PPI-based, focus on compression.
170
172 perlancar <perlancar@cpan.org>
173
175 This software is copyright (c) 2017, 2015, 2014, 2013, 2012 by
176 perlancar@cpan.org.
177
178 This is free software; you can redistribute it and/or modify it under
179 the same terms as the Perl 5 programming language system itself.
180
181
182
183perl v5.34.0 2022-01-21 Perl::Stripper(3)