package EO::System;

use strict;
use warnings;

use IO::Handle;
use EO::Singleton;
use EO::System::OS;
use EO::System::Perl;
use base qw( EO::Singleton );

our $VERSION = 0.90;

sub init {
  my $self = shift;
  if ($self->SUPER::init( @_ )) {
    $self->{out}   = \*STDOUT;
    $self->{in}    = \*STDIN;
    $self->{error} = \*STDERR;
    return 1;
  }
  return 0;
}

sub out {
  my $self = shift;
  $self = __PACKAGE__->new();
  if (@_) {
    $self->{ out } = shift;
    return $self;
  }
  return $self->{ out };
}

sub in {
  my $self = shift;
  $self = __PACKAGE__->new();
  if (@_) {
    $self->{ in } = shift;
    return $self;
  }
  return $self->{ in };
}

sub error {
  my $self = shift;
  $self = __PACKAGE__->new();
  if (@_) {
    $self->{ error } = shift;
    return $self;
  }
  return $self->{ error };
}


sub perl {
  return EO::System::Perl->new();
}

sub os {
  return EO::System::OS->new();
}

1;
