line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
1
|
|
|
1
|
|
24671
|
use strict; |
|
1
|
|
|
|
|
4
|
|
|
1
|
|
|
|
|
53
|
|
2
|
1
|
|
|
1
|
|
10
|
use warnings; |
|
1
|
|
|
|
|
3
|
|
|
1
|
|
|
|
|
124
|
|
3
|
|
|
|
|
|
|
|
4
|
|
|
|
|
|
|
package ExtUtils::Scriptlet; |
5
|
|
|
|
|
|
|
|
6
|
|
|
|
|
|
|
our $VERSION = '1.132640'; # VERSION |
7
|
|
|
|
|
|
|
|
8
|
|
|
|
|
|
|
# ABSTRACT: run perl code in a new process without quoting it, on any OS |
9
|
|
|
|
|
|
|
|
10
|
|
|
|
|
|
|
# |
11
|
|
|
|
|
|
|
# This file is part of ExtUtils-Scriptlet |
12
|
|
|
|
|
|
|
# |
13
|
|
|
|
|
|
|
# |
14
|
|
|
|
|
|
|
# Christian Walde has dedicated the work to the Commons by waiving all of his |
15
|
|
|
|
|
|
|
# or her rights to the work worldwide under copyright law and all related or |
16
|
|
|
|
|
|
|
# neighboring legal rights he or she had in the work, to the extent allowable by |
17
|
|
|
|
|
|
|
# law. |
18
|
|
|
|
|
|
|
# |
19
|
|
|
|
|
|
|
# Works under CC0 do not require attribution. When citing the work, you should |
20
|
|
|
|
|
|
|
# not imply endorsement by the author. |
21
|
|
|
|
|
|
|
# |
22
|
|
|
|
|
|
|
|
23
|
1
|
|
|
1
|
|
6
|
use Exporter 'import'; |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
36
|
|
24
|
1
|
|
|
1
|
|
1556
|
use Data::Dumper; |
|
1
|
|
|
|
|
12663
|
|
|
1
|
|
|
|
|
617
|
|
25
|
|
|
|
|
|
|
|
26
|
|
|
|
|
|
|
our @EXPORT_OK = qw( perl ); |
27
|
|
|
|
|
|
|
|
28
|
|
|
|
|
|
|
|
29
|
|
|
|
|
|
|
sub perl { |
30
|
14
|
|
|
14
|
1
|
17839
|
my ( $code, %p ) = @_; |
31
|
|
|
|
|
|
|
|
32
|
14
|
100
|
|
|
|
646
|
die "No code given" if !$code; |
33
|
|
|
|
|
|
|
|
34
|
|
|
|
|
|
|
# no idea why it needs 3, please send a letter if you know, so i can burn it |
35
|
13
|
50
|
|
|
|
135
|
$code =~ s/\r\n/\r\r\r\n/g if $^O eq "MSWin32"; |
36
|
|
|
|
|
|
|
|
37
|
13
|
100
|
100
|
|
|
138
|
die "at_argv needs to be an array reference" if $p{at_argv} and "ARRAY" ne ref $p{at_argv}; |
38
|
12
|
100
|
50
|
|
|
141
|
$p{at_argv} = |
39
|
|
|
|
|
|
|
!defined $p{at_argv} |
40
|
|
|
|
|
|
|
? "" |
41
|
|
|
|
|
|
|
: sprintf "\@ARGV = \@{ %s };", |
42
|
|
|
|
|
|
|
Data::Dumper->new( [ $p{at_argv} || [] ] )->Useqq( 1 )->Indent( 0 )->Dump; |
43
|
|
|
|
|
|
|
|
44
|
12
|
|
66
|
|
|
505
|
$p{perl} ||= $^X; |
45
|
12
|
|
100
|
|
|
195
|
$p{encoding} = sprintf ":encoding(%s)", $p{encoding} || "UTF-8"; |
46
|
12
|
100
|
|
|
|
387
|
$p{$_} = defined $p{$_} ? $p{$_} : "" for qw( args argv payload ); |
47
|
|
|
|
|
|
|
|
48
|
|
|
|
|
|
|
open # |
49
|
1
|
100
|
|
1
|
|
59
|
my $fh, # |
|
1
|
|
|
|
|
13
|
|
|
1
|
|
|
|
|
168
|
|
|
12
|
|
|
|
|
87375
|
|
50
|
|
|
|
|
|
|
"|- :raw $p{encoding}", # :raw protects the payload from write |
51
|
|
|
|
|
|
|
# mangling (newlines) |
52
|
|
|
|
|
|
|
"$p{perl} $p{args} - $p{argv}" # |
53
|
|
|
|
|
|
|
or die "cannot open perl: $!"; # |
54
|
|
|
|
|
|
|
|
55
|
11
|
50
|
|
|
|
840690
|
print $fh # |
56
|
|
|
|
|
|
|
"$p{at_argv};" # |
57
|
|
|
|
|
|
|
. "binmode STDIN;" # protect the payload from read |
58
|
|
|
|
|
|
|
# mangling (newlines, system locale) |
59
|
|
|
|
|
|
|
. "$code;" # unpack and execute serialized code |
60
|
|
|
|
|
|
|
. "\n__END__\n" # |
61
|
|
|
|
|
|
|
. $p{payload} # |
62
|
|
|
|
|
|
|
or die "cannot print code to perl: $!"; # |
63
|
|
|
|
|
|
|
|
64
|
11
|
|
|
|
|
80
|
eval { |
65
|
11
|
|
|
|
|
353
|
local $SIG{PIPE} = 'IGNORE'; # prevent the host perl from being |
66
|
|
|
|
|
|
|
# terminated if the child perl dies |
67
|
11
|
100
|
|
|
|
51871
|
close $fh or die "cannot close perl: $!"; # grab exit value so we can return it |
68
|
|
|
|
|
|
|
}; |
69
|
|
|
|
|
|
|
|
70
|
11
|
|
|
|
|
1214
|
return $?; |
71
|
|
|
|
|
|
|
} |
72
|
|
|
|
|
|
|
|
73
|
|
|
|
|
|
|
1; |
74
|
|
|
|
|
|
|
|
75
|
|
|
|
|
|
|
|
76
|
|
|
|
|
|
|
__END__ |