The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

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>