## name Basic passing. ## failures 0 ## cut print "this is not $literal"; print qq{this is not $literal}; print "this is not literal\n"; print qq{this is not literal\n}; #----------------------------------------------------------------------------- ## name Basic failure. ## failures 5 ## cut print 'this is not $literal'; print q{this is not $literal}; print 'this is not literal\n'; print q{this is not literal\n}; print 'this is not @literal'; #----------------------------------------------------------------------------- ## name Failure of simple scalar variables. ## failures 1 ## cut print '$blah'; #----------------------------------------------------------------------------- ## name Failure of simple array variables. ## failures 1 ## cut print '@blah'; #----------------------------------------------------------------------------- ## name Failure of common punctuation variables. ## failures 4 ## cut print '$_'; print '@_'; print '$@'; print '$!'; #----------------------------------------------------------------------------- ## name Failure of @+ & @-. ## failures 2 ## cut print '@+'; print '@-'; #----------------------------------------------------------------------------- ## name Failure of @^H. ## failures 1 ## cut print '@^H'; #----------------------------------------------------------------------------- ## name Readonly constant from Modules::ProhibitAutomaticExportation. ## failures 1 ## cut Readonly::Scalar my $EXPL => q{Use '@EXPORT_OK' or '%EXPORT_TAGS' instead}; #----------------------------------------------------------------------------- ## name OK to escape backslashes. ## failures 0 ## cut print 'it is ok to escape a backslash: \\t' print q{it is ok to escape a backslash: \\t} print 'you can do it multiple times: \\\\\\t' print q{you can do it multiple times: \\\\\\t} #----------------------------------------------------------------------------- ## name OK to escape quotes. ## failures 0 ## cut print 'you can also escape a quote: \'' print q{you can also escape a quote: \'} print 'you can escape a quote preceded by backslashes: \\\\\'' print q{you can escape a quote preceded by backslashes: \\\\\'} #----------------------------------------------------------------------------- ## name Valid escapes should not hide invalid ones. ## failures 4 ## cut print 'it is ok to escape a backslash: \\t but not a tee: \t' print q{it is ok to escape a backslash: \\t but not a tee: \t} print 'you can also escape a quote: \' but not a tee: \t' print q{you can also escape a quote: \' but not a tee: \t} #----------------------------------------------------------------------------- ## name Sigil characters not looking like sigils. ## failures 0 ## cut $sigil_at_end_of_word = 'list@ scalar$'; $sigil_at_end_of_word = 'scalar$ list@'; $sigil_at_end_of_word = q(list@ scalar$); $sigil_at_end_of_word = q(scalar$ list@); %options = ( 'foo=s@' => \@foo); #Like with Getopt::Long %options = ( q{foo=s@} => \@foo); #Like with Getopt::Long $sigil_as_delimiter = q$blah$; $sigil_as_delimiter = q $blah$; $sigil_as_delimiter = q@blah@; $sigil_as_delimiter = q @blah@; #----------------------------------------------------------------------------- ## name Do complain about RCS variables, if not turned on. ## failures 7 ## cut $VERSION = q<$Revision: 3984 $>; ($VERSION) = q<$Revision: 3984 $> =~ m/(\d+)/mx; our $VERSION = substr(q/$Revision: 3984 $/, 10); our ($VERSION) = q<$Revision: 3984 $> =~ m/(\d+)/mx; our ($VERSION) = (q<$Revision: 3984 $> =~ m/(\d+)/mx); our (undef, $AUTHOR, undef, undef, $VERSION) = split m/\s+/, q<$Author: clonezone $ $Revision: 3984 $>; # Yes, silly example, but still need to check it. if ( ($VERSION) = q<$Revision: 3984 $> =~ m/(\d+)/mx ) {} #----------------------------------------------------------------------------- ## name Don't complain about RCS variables, if turned on. ## failures 0 ## parms { rcs_keywords => 'Revision Author' } ## cut $VERSION = q<$Revision: 3984 $>; ($VERSION) = q<$Revision: 3984 $> =~ m/(\d+)/mx; our $VERSION = substr(q/$Revision: 3984 $/, 10); our ($VERSION) = q<$Revision: 3984 $> =~ m/(\d+)/mx; our ($VERSION) = (q<$Revision: 3984 $> =~ m/(\d+)/mx); our (undef, $AUTHOR, undef, undef, $VERSION) = split m/\s+/, q<$Author: clonezone $ $Revision: 3984 $>; # Yes, silly example, but still need to check it. if ( ($VERSION) = q<$Revision: 3984 $> =~ m/(\d+)/mx ) {} #----------------------------------------------------------------------------- ## name Don't complain about '${}' and '@{}' because they're invalid syntax. See RT #38528/commit r3077 for original problem/solution. ## failures 0 ## cut use Blah '${}' => \&scalar_deref; use Blah '@{}' => \&array_deref; use Blah '%{}' => \&hash_deref; use Blah '&{}' => \&code_deref; use Blah '*{}' => \&glob_deref; use Blah ('${}' => \&scalar_deref); use Blah ('@{}' => \&array_deref); use Blah ('%{}' => \&hash_deref); use Blah ('&{}' => \&code_deref); use Blah ('*{}' => \&glob_deref); use Blah 1.0 ('${}' => \&scalar_deref); use Blah 1.0 ('@{}' => \&array_deref); #----------------------------------------------------------------------------- ## name use vars arguments. ## failures 0 ## cut use vars '$FOO'; use vars '$FOO', '@BAR'; use vars ('$FOO'); use vars ('$FOO', '@BAR'); use vars (('$FOO')); use vars (('$FOO', '@BAR')); use vars ((('$FOO'))); use vars ((('$FOO', '@BAR'))); use vars qw< $FOO @BAR >; use vars qw< $FOO @BAR >, '$BAZ'; #----------------------------------------------------------------------------- ## name Include statement failure. ## failures 1 ## cut use Generic::Module '$FOO'; #----------------------------------------------------------------------------- ## name Things that look like email addresses. ## failures 0 ## cut $simple = 'me@foo.bar'; $complex = q{don-quixote@man-from.lamancha.org}; #----------------------------------------------------------------------------- ## name More things that look like email addresses. ## failures 0 ## cut $simple = 'Email: me@foo.bar'; $complex = q{"don-quixote@man-from.lamancha.org" is my address}; send_email_to ('foo@bar.com', ...); #----------------------------------------------------------------------------- ## name Email addresses with embedded violations. ## TODO Policy is not smart enough to handle this yet. ## failures 2 ## cut $simple = 'Email: $name@$company.$domain'; send_email_to('$some_var: foo@bar.com', ...); #----------------------------------------------------------------------------- ## name Confirm we flag all defined backslashed interpolations. RT #61970 ## failures 26 ## cut '\t'; # tab (HT, TAB) '\n'; # newline (NL) '\r'; # return (CR) '\f'; # form feed (FF) '\b'; # backspace (BS) '\a'; # alarm (bell) (BEL) '\e'; # escape (ESC) '\033'; # octal char (example: ESC) '\x1b'; # hex char (example: ESC) '\x{263a}'; # wide hex char (example: SMILEY) '\c['; # control char (example: ESC) '\N{name}'; # named Unicode character '\N{U+263D}'; # Unicode character (example: FIRST QUARTER MOON) '\l'; # lowercase next char '\u'; # uppercase next char '\L'; # lowercase till \E '\U'; # uppercase till \E '\E'; # end case modification '\Q'; # quote non-word characters till \E '\1'; # See note 1, below '\2'; # See note 1, below '\3'; # See note 1, below '\4'; # See note 1, below '\5'; # See note 1, below '\6'; # See note 1, below '\7'; # See note 1, below # Note 1: These are not documented in perop that I can find, but the code in # toke.c makes them equivalent to \0 for interpolated strings (though # not, of course, for regular expressions or the substitution portion # of s///). #----------------------------------------------------------------------------- ## name Confirm we ignore all non-special backslashed word characters. RT #61970 ## failures 0 ## cut '\8'; '\9'; '\A'; '\B'; '\C'; '\D'; '\F'; '\G'; '\H'; '\I'; '\J'; '\K'; '\M'; '\O'; '\P'; '\R'; '\S'; '\T'; '\V'; '\W'; '\X'; '\Y'; '\Z'; '\d'; '\g'; '\h'; '\i'; '\j'; '\k'; '\m'; '\o'; '\p'; '\q'; '\s'; '\v'; '\w'; '\y'; '\z'; ############################################################################## # $URL: http://perlcritic.tigris.org/svn/perlcritic/trunk/distributions/Perl-Critic/t/ValuesAndExpressions/RequireInterpolationOfMetachars.run $ # $Date: 2010-10-31 18:07:54 -0700 (Sun, 31 Oct 2010) $ # $Author: clonezone $ # $Revision: 3984 $ ############################################################################## # Local Variables: # mode: cperl # cperl-indent-level: 4 # fill-column: 78 # indent-tabs-mode: nil # c-indentation-style: bsd # End: # ex: set ts=8 sts=4 sw=4 tw=78 ft=perl expandtab shiftround :