NAME

stringification - allow or forbid implicitly converting references into strings

SYNOPSIS

no stringification;

my $array = [ 1, 2, 3 ];

print "My array is $array\n";  # dies

DESCRIPTION

Normally in Perl, a reference may be implicitly converted into a string, usually of a form like HASH(0x1234567).

This module provides a lexically-scoped pragma which alters the behaviour of the following operations:

"$ref"             # stringify
$ref . "foo"       # concat
lc $ref
lcfirst $ref
uc $ref
ucfirst $ref
quotemeta $ref

When disabled by no stringification, all of these operations will fail with an exception when invoked on a non-object reference.

$ perl -E 'no stringification; my $arr = []; say "Array is $arr"'
Attempted to concat a reference at -e line 1.

The effects of this module are lexically scoped; to re-enable stringification of references during a lexical scope, use stringification again.

TODO

  • More testing, especially around interoperatbility with other op-hooking modules.

  • Hook more ops; including

    print $ref
    say $ref
    join "", $ref
    split //, $ref
    $ref =~ m//
    $ref =~ s///;
    s//$ref/;
    substr( $ref, 0, 0 )
    substr( $str, 0, 0, $ref )
    substr( $str, 0, 0 ) = $ref
  • Consider whether to detect for objects that don't have overload magic, and forbid these too.

  • A mode where string conversions just give warnings, rather than outright failures.

    no stringification 'warn';

AUTHOR

Paul Evans <leonerd@leonerd.org.uk>