1Padre::Document::Perl::UBseegrinCnoenrt(r3i)buted Perl DPoacdurmee:n:tDaotciuomnent::Perl::Beginner(3)
2
3
4
6 Padre::Document::Perl::Beginner - naive implementation of some beginner
7 specific error checking
8
10 use Padre::Document::Perl::Beginner;
11 my $beginner = Padre::Document::Perl::Beginner->new;
12 if (not $beginner->check($data)) {
13 warn $beginner->error;
14 }
15
17 This is a naive implementation. It needs to be replaced by one using
18 PPI.
19
20 In Perl 5 there are lots of pitfalls the unaware, especially the
21 beginner can easily fall in. While some might expect the Perl compiler
22 itself would catch those it does not (yet ?) do it. So we took the
23 initiative and added a beginners mode to Padre in which these extra
24 issues are checked. Some are real problems that would trigger an error
25 anyway we just make them a special case with a more specific error
26 message. (e.g. "use warning;" without the trailing s) Others are valid
27 code that can be useful in the hands of a master but that are poisonous
28 when written by mistake by someone who does not understand them. (e.g.
29 "if ($x = /value/) { }" ).
30
31 This module provides a method called "check" that can check a Perl
32 script (provided as parameter as a single string) and recognize
33 problematic code.
34
36 See <http://padre.perlide.org/ticket/52> and
37 <http://www.perlmonks.org/?node_id=728569>
38
40 •
41
42
43 split /,/, @data;
44
45 Here @data is in scalar context returning the number of elements.
46 Spotted in this form:
47
48 split /,/, @ARGV;
49
50 •
51
52
53 use warning;
54
55 s is missing at the end.
56
57 •
58
59
60 map { $_; } (@items),$extra_item;
61
62 is the same as
63
64 map { $_; } (@items,$extra_item);
65
66 but you usually want
67
68 (map { $_; } (@items)),$extra_item;
69
70 which means: map all @items and them add $extra_item without
71 mapping it.
72
73 • Warn about Perl-standard package names being reused
74
75 package DB;
76
77 •
78
79
80 $x = chomp $y;
81 print chomp $y;
82
83 •
84
85
86 map { s/foo/bar/; } (@items);
87
88 This returns an array containing true or false values (s/// -
89 return value).
90
91 Use
92
93 map { s/foo/bar/; $_; } (@items);
94
95 to actually change the array via s///.
96
97 •
98
99
100 <@X>
101
102 •
103
104
105 if ($x = /bla/) {
106 }
107
108 • Pipe | in open() not at the end or the beginning.
109
110 •
111
112
113 open($ph, "| something |");
114
115 • Regular expression starting with a quantifier such as
116
117 /+.../
118
119 •
120
121
122 } else if {
123
124 •
125
126
127 } elseif {
128
129 •
130
131
132 close;
133
135 Please feel free to add as many checks as you like. This is done in
136 three steps:
137
138 Add the test
139 Add one (or more) tests for this case to t/75-perl-beginner.t
140
141 The test should be successful when your supplied sample fails the check
142 and returns the correct error message. As texts of error messages may
143 change, try to match a good part which allows identification of the
144 message but don't match the very exact text.
145
146 Tests could use either one-liners written as strings within the test
147 file or external support files. There are samples for both ways in the
148 test script.
149
150 Add the check
151 Add the check to the check-sub of this file
152 (Document/Perl/Beginner.pm). There are plenty samples here. Remember to
153 add a sample (and maybe short description) what would fail the test.
154
155 Run the test script to match your test case(s) to the new check.
156
157 Add the configuration option
158 Go to Config.pm, look for the beginner error checks configuration and
159 add a new setting for your new check there. It defaults to 1 (run the
160 check), but a user could turn it off by setting this to 0 within the
161 Padre configuration file.
162
164 Copyright 2008-2011 The Padre development team as listed in Padre.pm.
165
166 This program is free software; you can redistribute it and/or modify it
167 under the same terms as Perl itself.
168
169 The full text of the license can be found in the LICENSE file included
170 with this module.
171
172
173
174perl v5.32.1 2021-01-27Padre::Document::Perl::Beginner(3)