The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Data::Lock - makes variables (im)?mutable

VERSION

$Id: Lock.pm,v 0.4 2013/03/20 22:17:40 dankogai Exp dankogai $

SYNOPSIS

   use Data::Lock qw/dlock dunlock/;

   # note parentheses and equal

   dlock( my $sv = $initial_value );
   dlock( my $ar = [@values] );
   dlock( my $hr = { key => value, key => value, ... } );
   dunlock $sv;
   dunlock $ar; dunlock \@av;
   dunlock $hr; dunlock \%hv;

DESCRIPTION

dlock makes the specified variable immutable like Readonly. Unlike Readonly which implements immutability via tie, dlock makes use of the internal flag of perl SV so it imposes almost no penalty.

Like Readonly, dlock locks not only the variable itself but also elements therein.

As of verion 0.03, you can dlock objects as well. Below is an example constructor that returns an immutable object:

  sub new {
      my $pkg = shift; 
      my $self = { @_ };
      bless $self, $pkg;
      dlock($self);
      $self;
  }

Or consider using Moose.

EXPORT

Like List::Util and Scalar::Util, functions are exported only explicitly. This module comes with dlock and dunlock.

  use Data::Lock;                   # nothing imported;
  use Data::Lock qw/dlock dunlock/; # imports dlock() and dunlock()

FUNCTIONS

dlock

  dlock($scalar);

Locks $scalar and if $scalar is a reference, recursively locks referents.

dunlock

Does the opposite of dlock.

SEE ALSO

Readonly, perlguts, perlapi

AUTHOR

Dan Kogai, <dankogai+gmail at gmail.com>

BUGS & SUPPORT

See Attribute::Constant.

COPYRIGHT & LICENSE

Copyright 2008 Dan Kogai, all rights reserved.

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