rbpl 0.1 → 0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. data/lib/perl/engine.pl +9 -5
  2. data/lib/perl/engine.rb +2 -5
  3. metadata +12 -6
@@ -3,7 +3,11 @@
3
3
  use strict;
4
4
  use YAML::Syck;
5
5
 
6
- $| =1; # autoflush
6
+ use IO::Handle;
7
+
8
+ open Reader, "<&=", $ENV{ENGINE_READER};
9
+ open Writer, ">&=", $ENV{ENGINE_WRITER};
10
+ Writer->autoflush(1);
7
11
 
8
12
  our $data;
9
13
  our $data_length;
@@ -17,18 +21,18 @@ sub eval_and_respond {
17
21
  my $packed_result = Dump($@ ?
18
22
  { status => "error", error => $@ } :
19
23
  { status => "ok", result => $result });
20
- print pack("L", length($packed_result)).$packed_result;
24
+ print Writer pack("L", length($packed_result)).$packed_result;
21
25
  $result;
22
26
  }
23
27
 
24
28
  while(1) {
25
29
 
26
- exit 0 if eof(STDIN); # Wait for data or exit if the parent closes the pipe
30
+ exit 0 if eof(Reader); # Wait for data or exit if the parent closes the pipe
27
31
 
28
- read(STDIN, $data_length, 4) == 4 or die "Can not read \$data_length from stdin";
32
+ read(Reader, $data_length, 4) == 4 or die "Can not read \$data_length from stdin";
29
33
  $data_length = unpack("L", $data_length);
30
34
 
31
- read(STDIN, $data, $data_length) == $data_length or die "Can not read \$data from stdin";
35
+ read(Reader, $data, $data_length) == $data_length or die "Can not read \$data from stdin";
32
36
  $data = Load($data);
33
37
 
34
38
  if($data->{request} eq "eval") {
@@ -29,12 +29,9 @@ class Perl
29
29
 
30
30
  @pid = fork do
31
31
  writer[1].close
32
- STDIN.reopen(writer[0])
33
- writer[0].close
34
-
35
32
  reader[0].close
36
- STDOUT.reopen(reader[1])
37
- reader[1].close
33
+ ENV["ENGINE_READER"] = writer[0].fileno.to_s
34
+ ENV["ENGINE_WRITER"] = reader[1].fileno.to_s
38
35
 
39
36
  exec "perl", PerlFile
40
37
  end
metadata CHANGED
@@ -1,7 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbpl
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.1"
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 2
8
+ version: "0.2"
5
9
  platform: ruby
6
10
  authors:
7
11
  - Ayose Cazorla
@@ -9,7 +13,7 @@ autorequire:
9
13
  bindir: bin
10
14
  cert_chain: []
11
15
 
12
- date: 2010-06-13 00:00:00 +01:00
16
+ date: 2010-06-14 00:00:00 +01:00
13
17
  default_executable:
14
18
  dependencies: []
15
19
 
@@ -22,8 +26,8 @@ extensions: []
22
26
  extra_rdoc_files: []
23
27
 
24
28
  files:
25
- - lib/perl/engine.pl
26
29
  - lib/perl/engine.rb
30
+ - lib/perl/engine.pl
27
31
  - lib/perl.rb
28
32
  - Rakefile
29
33
  has_rdoc: true
@@ -39,18 +43,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
39
43
  requirements:
40
44
  - - ">="
41
45
  - !ruby/object:Gem::Version
46
+ segments:
47
+ - 0
42
48
  version: "0"
43
- version:
44
49
  required_rubygems_version: !ruby/object:Gem::Requirement
45
50
  requirements:
46
51
  - - ">="
47
52
  - !ruby/object:Gem::Version
53
+ segments:
54
+ - 0
48
55
  version: "0"
49
- version:
50
56
  requirements: []
51
57
 
52
58
  rubyforge_project:
53
- rubygems_version: 1.3.5
59
+ rubygems_version: 1.3.6
54
60
  signing_key:
55
61
  specification_version: 3
56
62
  summary: Execute Perl code from a Ruby script