overload::substr allows this to be overloaded. This allows objects that behave like a string, to specify to Perl how they will handle the substr operator.
$ cat example.plThe module is still in its early days yet, but the basics appear to be working on all Perl versions back to 5.8. I also want to try extending it, so that split() and regexp matches with m// and substitutions with s/// also use the substr operation. The identity that
#!/usr/bin/perl
use strict;
use feature qw( say );
package ExampleString;
use overload::substr;
sub new { return bless [ @_ ]; }
sub _substr
{
my $self = shift;
my ( $offs, $len, $replace ) = @_;
return sprintf ">> %s between %d and %d <<", $self, $offs, $offs+$len;
}
package main;
my $str = ExampleString->new( "Hello, world" );
say substr( $str, 2, 5 );
$ perl example.pl
>> ExampleString=ARRAY(0x86dd9c8) between 2 and 7 <<
$1 == substr( $str, $-[1], $+[1] - $-[1] )is sure to be useful here.
I need a good example to show it off with sometime. I have in mind a string-alike object with real positional cursors, which remember their contextual position even after edits in other parts of the string. But more on that later...
No comments:
Post a Comment