NAME

Data::Struct - Simple struct building

SYNOPSIS

  use Data::Struct;             # exports 'struct'

  # Define the struct and its accessors.
  struct Foo => [ qw(foo bar) ];
  struct Foo => qw(foo bar);    # alternative

  # Construct the struct.
  my $object = struct "Foo";    # empty struct
  my $object = struct Foo => { bar => 1 };
  my $object = struct Foo => { foo => "yes", bar => 1 };

  # Use it.
  print "bar is " . $object->bar . "\n";       # 1
  $object->bar = 2;
  print "bar is now " . $object->bar . "\n";   # 2

DESCRIPTION

A struct is a data structure that can contain values (attributes). The values of the attributes can be set at creation time, and read and modified at run time. This module implements a very basic and easy to use struct builder.

Attributes can be anything that Perl can handle. There's no checking on types. If you need structs with type checking and inheritance and other fancy stuff, use one of the many CPAN modules that implement data structures using classes and objects. Data::Struct deals with data structures and not objects, so I placed this module under the Data:: hierarchy.

To use Data::Struct, just use it. This will export the struct() function that does all the work.

To define a structure, call struct() with the name of the structure and a list of accessors to be created:

  struct( "Foo", "foo", "bar");

which can be nicely written as:

  struct Foo => qw( foo bar );

To prevent ambiguities, defining a struct requires struct() to be called in void context.

To create an empty structure:

  my $s = struct "Foo";

To create a structure with one or more pre-initialised attributes:

  my $s = struct Foo => { foo => 3, bar => "Hi" };

To prevent ambiguities, creating a struct requires struct() to be called in scalar context.

When the structure has been created, you can use accessor functions to set and get the attributes:

  print "bar is " . $s->bar . "\n";       # "Hi"
  $s->bar = 2;
  print "bar is now " . $s->bar . "\n";   # 2

PECULIARITIES

Redefining a structure adds new attributes but leaves existing attibutes untouched.

  struct "Foo" => qw(bar);
  my $s = struct "Foo" => { bar => 2 };
  struct Foo => qw(blech);
  $s->blech = 4;
  say $s->bar;          # prints 2
  say $s->blech;        # prints 4

This may change in a future version.

SUPPORT

Bugs should be reported via the CPAN bug tracker at

http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Data::Struct

For other issues, contact the author.

AUTHOR

Johan Vromans <jv@cpan.org>.

SEE ALSO

Object::Tiny, Object::Tiny::Lvalue, Object::Tiny::RW, Class::Struct.

COPYRIGHT

Copyright 2011 Johan Vromans

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.