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

NAME

Syntax::Keyword::Val - Provides a readonly variant of 'my' called 'val'

WARNING

While I do have serious intentions for this module in the future, it is definitely a toy as written now. At this stage, it serves better as a simple example of using Keyword::Simple.

DESCRIPTION

Simply use this module, then place the val keyword where you'd normally use my for a read-only variant.

 use Syntax::Keyword::Val;

 val $foo = "bar";
 $foo = 123;        # ERROR

 val $foo = {a => 123, b => 456};
 $foo->{a}   = 666;       # ERROR
 $foo->{xyz} = "xyzzy";   # ERROR
 delete $foo->{b};        # ERROR

The implementation uses Data::Lock, which itself uses the very fast internal SV flag to enforce the read-only status, so there should be no runtime penalty for using it.

BUGS

Bugs and missing features aplenty. To start, due to the hacky implementation using Keyword::Simple (which is great, but quite limited), the val keyword currently only works for standalone declarations, i.e. statements that would normally begin with my. Statements like this will not work:

 # Doesn't work, will generate a syntax error
 open val $fh, '<', $filename;

Only scalars and references can be declared as val. Attempting to declare a list or hash as a val will make it a normal variable (and issue a warning)

 # Issues a warning (assuming 'use warnings' is in effect)
 val @foo = qw(foo bar baz);

Finally, val only applies to the first variable in a group, and the rest are read-write as normal.

 # Issues a warning (assuming 'use warnings' is in effect)
 val ($foo, $bar) = @baz;

AUTHOR

Chuck Adams <cja987@gmail.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2013 by Chuck Adams

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