# RexInline

Rex::Inline 是一个在perl中直接调用rex的接口

### 适用场景

虽然 `rex` 的命令行工具很好用,
可是有时不想写 Rexfile,
并且如果想把 Rex 的功能模块化 给其他App调用的时候,
就需要用到这个 API 了。

### 调用方法
1. 匿名调用 Rex

  use Rex -feature => ['1.0'];
  use Rex::Inline;

  my $rex_inline = Rex::Inline->new;
  $rex_inline->add_task(
      {
        user => $user,
        server => [@server],
        password => $password,
        # private_key => $private_key_path,
        # public_key => $public_key_path,
        func => sub {
          # 这里写要在 Rex 中执行的语句
        }
      }
  );

  $rex_inline->execute;
  my $reports = $rex_inline->reports;

2. 写成模块
  #### Test.pm

  package Test;
  use Moose; # or Moo
  use Rex -feature => ['1.0'];

  extends 'Rex::Inline::Base';

  sub func {
    my $self = shift;
    return sub { 
      say run "uptime" 
      say $self->input;
    }
  }

  1;

  ### t.pl
  use Test;
  use Rex::Inline;

  my $rex_inline = Rex::Inline->new;
  $rex_inline->add_task( Test->new(
      user => $user,
      server => [@server],
      password => $password,
      # private_key => $private_key_path,
      # public_key => $public_key_path,
      input => 'test', # 任何想传给模块的参数
  ) );

  $rex_inline->execute;
  my $reports = $rex_inline->reports;