/
exec.t
101 lines (82 loc) · 1.95 KB
/
exec.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#! perl
use strict;
use warnings;
use Config;
use FindBin;
use lib "$FindBin::Bin"; # required to load filter-util.pl
BEGIN {
my $foundTR = 0 ;
if ($^O eq 'MSWin32') {
# Check if tr is installed
foreach (split ";", $ENV{PATH}) {
if (-e "$_/tr.exe") {
$foundTR = 1;
last ;
}
}
}
else {
$foundTR = 1
if $Config{'tr'} ne '' ;
}
if (! $foundTR) {
print "1..0 # Skipping tr not found on this system.\n" ;
exit 0 ;
}
}
require "filter-util.pl" ;
use vars qw( $Inc $Perl $script ) ;
$script = '';
if (eval {
require POSIX;
my $val = POSIX::setlocale(&POSIX::LC_CTYPE);
$val !~ m{^(C|en)}
}) { # CPAN #41285
$script = q(BEGIN { $ENV{LANG}=$ENV{LC_ALL}=$ENV{LC_CTYPE}='C'; });
}
$script .= <<'EOF' ;
use Filter::exec qw(tr '[A-E][I-M]' '[a-e][i-m]') ;
use Filter::exec qw(tr '[N-Z]' '[n-z]') ;
EOF
$script .= <<'EOF' ;
$A = 2 ;
PRINT "A = $A\N" ;
PRINT "HELLO JOE\N" ;
PRINT <<EOM ;
MARY HAD
A
LITTLE
LAMB
EOM
PRINT "A (AGAIN) = $A\N" ;
EOF
my $filename = "exec$$.test" ;
writeFile($filename, $script) ;
my $expected_output = <<'EOM' ;
a = 2
Hello joe
mary Had
a
little
lamb
a (aGain) = 2
EOM
$a = `$Perl $Inc $filename 2>&1` ;
print "1..3\n";
ok(1, ($? >> 8) == 0) or diag("$Perl $Inc $filename 2>&1", $?);
if ($^O eq 'cygwin' and $a ne $expected_output) {
ok(2, 1, "TODO $^O");
diag($a);
} else {
ok(2, $a eq $expected_output) or diag($a);
}
unlink $filename;
# RT 101668 double free of BUF_NEXT in SvREFCNT_dec(parser->rsfp_filters)
# because we stole BUF_NEXT from IoFMT_NAME.
#
# echo is fairly common on all shells and archs I think.
$a = `echo __DATA__ | $Perl $Inc -MFilter::exec=cat - 2>&1`;
ok(3, ($? >> 8) == 0) or diag($?);
# Note: To debug this case it is easier to put `echo __DATA__` into a data.sh
# `make MPOLLUTE=-DFDEBUG`
# and `gdb --args perl5.22.0d-nt -DP -Mblib -MFilter::exec=sh data.sh`