NAME

    Signature::Attribute::Alias - make signature parameters that alias
    caller-provided values

SYNOPSIS

       use v5.26;
       use Sublike::Extended;
       use Signature::Attribute::Alias;
       use experimental 'signatures';
    
       extended sub trim_spaces ($s :Alias) {
          $s =~ s/^\s+//;
          $s =~ s/\s+$//;
       }
    
       my $string = "  hello, world!    ";
       trim_spaces $string;
       say "<$string>";

DESCRIPTION

    This module provides a third-party subroutine parameter attribute via
    XS::Parse::Sublike, which declares that the parameter will alias the
    value passed by the caller, rather than take a copy of it.

    WARNING The ability for sublike constructions to take third-party
    parameter attributes is still new and highly experimental, and subject
    to much API change in future. As a result, this module should be
    considered equally experimental. Core perl's parser does not permit
    parameters to take attributes. This ability must be requested
    specially; either by using Sublike::Extended, or perhaps enabled
    directly by some other sublike keyword using the XS::Parse::Sublike
    infrastructure.

PARAMETER ATTRIBUTES

 :Alias

       extended sub f($x :Alias) { ... }

    Declares that the lexical variable created by the parameter will be an
    alias to the value passed in by the caller rather than, as would
    normally be the case, simply contain a copy it. This means that any
    modifications of the lexical within the subroutine will be reflected in
    the value from the caller - which, therefore - must be mutable.

    It is not automatically an error if the caller passes in an immutable
    value (such as a constant), but any attempt to modify it will yield the
    usual "Modification of read-only value attempted ..." warning from
    within the body of the subroutine.

    This attribute can only be applied to positional, scalar parameters
    that are mandatory; i.e. do not have a defaulting expression.

AUTHOR

    Paul Evans <leonerd@leonerd.org.uk>

