Commit | Line | Data |
b3eb6a9b |
1 | package re; |
2 | |
56953603 |
3 | $VERSION = 0.02; |
4 | |
b3eb6a9b |
5 | =head1 NAME |
6 | |
7 | re - Perl pragma to alter regular expression behaviour |
8 | |
9 | =head1 SYNOPSIS |
10 | |
e4d48cc9 |
11 | use re 'taint'; |
12 | ($x) = ($^X =~ /^(.*)$/s); # $x is tainted here |
b3eb6a9b |
13 | |
2cd61cdb |
14 | $pat = '(?{ $foo = 1 })'; |
e4d48cc9 |
15 | use re 'eval'; |
2cd61cdb |
16 | /foo${pat}bar/; # won't fail (when not under -T switch) |
e4d48cc9 |
17 | |
18 | { |
19 | no re 'taint'; # the default |
20 | ($x) = ($^X =~ /^(.*)$/s); # $x is not tainted here |
21 | |
22 | no re 'eval'; # the default |
2cd61cdb |
23 | /foo${pat}bar/; # disallowed (with or without -T switch) |
e4d48cc9 |
24 | } |
b3eb6a9b |
25 | |
2cd61cdb |
26 | use re 'debug'; |
27 | /^(.*)$/s; # output debugging info |
28 | # during compile and run time |
29 | |
3ffabb8c |
30 | (We use $^X in these examples because it's tainted by default.) |
31 | |
b3eb6a9b |
32 | =head1 DESCRIPTION |
33 | |
34 | When C<use re 'taint'> is in effect, and a tainted string is the target |
35 | of a regex, the regex memories (or values returned by the m// operator |
e4d48cc9 |
36 | in list context) are tainted. This feature is useful when regex operations |
37 | on tainted data aren't meant to extract safe substrings, but to perform |
38 | other transformations. |
b3eb6a9b |
39 | |
e4d48cc9 |
40 | When C<use re 'eval'> is in effect, a regex is allowed to contain |
2cd61cdb |
41 | C<(?{ ... })> zero-width assertions even if regular expression contains |
42 | variable interpolation. That is normally disallowed, since it is a |
43 | potential security risk. Note that this pragma is ignored when the regular |
44 | expression is obtained from tainted data, i.e. evaluation is always |
45 | disallowed with tainted regular expresssions. See L<perlre/(?{ code })>. |
46 | |
47 | For the purpose of this pragma, interpolation of preexisting regular |
48 | expressions is I<not> considered a variable interpolation, thus |
49 | |
50 | /foo${pat}bar/ |
51 | |
52 | I<is> allowed if $pat is a preexisting regular expressions, even |
53 | if $pat contains C<(?{ ... })> assertions. |
54 | |
55 | When C<use re 'debug'> is in effect, perl emits debugging messages when |
56 | compiling and using regular expressions. The output is the same as that |
57 | obtained by running a C<-DDEBUGGING>-enabled perl interpreter with the |
58 | B<-Dr> switch. It may be quite voluminous depending on the complexity |
59 | of the match. |
60 | See L<perldebug/"Debugging regular expressions"> for additional info. |
61 | |
62 | I<The directive C<use re 'debug'> is not lexically scoped.> It has |
63 | both compile-time and run-time effects. |
b3eb6a9b |
64 | |
65 | See L<perlmodlib/Pragmatic Modules>. |
66 | |
67 | =cut |
68 | |
69 | my %bitmask = ( |
e4d48cc9 |
70 | taint => 0x00100000, |
71 | eval => 0x00200000, |
b3eb6a9b |
72 | ); |
73 | |
74 | sub bits { |
56953603 |
75 | my $on = shift; |
b3eb6a9b |
76 | my $bits = 0; |
77 | unless(@_) { |
78 | require Carp; |
79 | Carp::carp("Useless use of \"re\" pragma"); |
80 | } |
56953603 |
81 | foreach my $s (@_){ |
82 | if ($s eq 'debug') { |
83 | eval <<'EOE'; |
84 | use DynaLoader; |
85 | @ISA = ('DynaLoader'); |
86 | bootstrap re; |
87 | EOE |
88 | install() if $on; |
89 | uninstall() unless $on; |
90 | next; |
91 | } |
92 | $bits |= $bitmask{$s} || 0; |
93 | } |
b3eb6a9b |
94 | $bits; |
95 | } |
96 | |
97 | sub import { |
98 | shift; |
56953603 |
99 | $^H |= bits(1,@_); |
b3eb6a9b |
100 | } |
101 | |
102 | sub unimport { |
103 | shift; |
56953603 |
104 | $^H &= ~ bits(0,@_); |
b3eb6a9b |
105 | } |
106 | |
107 | 1; |