--- /dev/null
+package Root;
+
+use strict;
+use warnings;
+use Carp;
+
+# CC This lib path is unnecessary - commented out as supercedes the 'lib' use in jpred itself.
+#use lib qw(/homes/jon/cvs/jon/jpred/src /homes/jon/usr/lib/perl5);
+
+=head1 NAME
+
+Root - Base module for new classes to inherit from
+
+=head1 DESCRIPTION
+
+This modules provides a new method for other classes to use if they so wish.
+
+=head1 METHODS
+
+=head2 new(foo => "bar")
+
+This constructs an object of the right class and returns it. Any arugments passed to the constructer
+will be parsed as a hash with the first argument from the pair acting as the method that should
+be called and the second being the argument for that method.
+
+=cut
+
+sub new {
+ my ( $class, %args ) = @_;
+ my $self = bless {}, ref($class) || $class;
+
+ for ( keys %args ) {
+ croak "No such method '$_'" unless $self->can($_);
+ $self->$_( $args{$_} );
+ }
+
+ return $self;
+}
+
+sub trace {
+ my ($self) = @_;
+
+ my $i = 1;
+
+ while ( my @caller = caller $i ) {
+
+ #print join("#", map { defined $_ ? $_ : ""} @caller), "\n";
+ print $caller[0], ":", $caller[2], " ", $caller[3], "\n";
+ $i++;
+ }
+}
+
+sub warn {
+ my ( $self, @message ) = @_;
+ print STDERR join( "\n", @message ), "\n";
+ $self->trace;
+}
+
+1;