#!/usr/bin/perl -T -- use strict; use warnings; use Scalar::Util qw' tainted '; { use re qw' taint '; print '$^X tainted ', tainted($^X), "\n"; print '$1 tainted ', tainted($1), "\n"; print '"$1" tainted ', tainted("$1"), "\n"; print '($^X=~/(.)/) tainted ', tainted($^X=~/(.)/), "\n"; {print '(my($x)=$^X=~/(.)/) tainted ', tainted(my($x)=$^X=~/(.)/), "\n";} print '$1 tainted ', tainted($1), "\n"; print '"$1" tainted ', tainted("$1"), "\n"; {print '(my($x)=$^X=~s/(.)/$1/) tainted ', tainted(my($x)=$^X=~s/(.)/$1/), "\n";} print '$1 tainted ', tainted($1), "\n"; print '"$1" tainted ', tainted("$1"), "\n"; } print "\n", '='x33,"\n"; { no re qw' taint '; print '$^X tainted ', tainted($^X), "\n"; print '$1 tainted ', tainted($1), "\n"; print '"$1" tainted ', tainted("$1"), "\n"; print '($^X=~/(.)/) tainted ', tainted($^X=~/(.)/), "\n"; {print '(my($x)=$^X=~/(.)/) tainted ', tainted(my($x)=$^X=~/(.)/), "\n";} print '$1 tainted ', tainted($1), "\n"; print '"$1" tainted ', tainted("$1"), "\n"; {print '(my($x)=$^X=~s/(.)/$1/) tainted ', tainted(my($x)=$^X=~s/(.)/$1/), "\n";} print '$1 tainted ', tainted($1), "\n"; print '"$1" tainted ', tainted("$1"), "\n"; } __END__ $ perl -T re.taint.pl $^X tainted 1 $1 tainted 0 Use of uninitialized value $1 in string at re.taint.pl line 11. "$1" tainted 0 ($^X=~/(.)/) tainted 0 (my($x)=$^X=~/(.)/) tainted 1 $1 tainted 0 "$1" tainted 1 (my($x)=$^X=~s/(.)/$1/) tainted 1 $1 tainted 0 "$1" tainted 1 ================================= $^X tainted 1 $1 tainted 1 Use of uninitialized value $1 in string at re.taint.pl line 25. "$1" tainted 1 ($^X=~/(.)/) tainted 0 (my($x)=$^X=~/(.)/) tainted 0 $1 tainted 1 "$1" tainted 0 (my($x)=$^X=~s/(.)/$1/) tainted 0 $1 tainted 0 "$1" tainted 0