Here's a variation on your theme:
##### MatchVars.pm ##### package MatchVars; use strict; use warnings; sub tie { my %args = @_; my $string = delete $args{string} || return; while(my($k,$v) = each %args){ tie $$v, $k, $string } } package match; sub TIESCALAR {bless [$_[1]],$_[0]} sub FETCH {substr(${$_[0][0]}, $-[0], $+[0] - $-[0] )} package pre; use base "match"; sub FETCH {substr(${$_[0][0]},0, $-[0] )} package post; use base "match"; sub FETCH {substr(${$_[0][0]}, $+[0] )} 1; __END__ ##### match_test.pl ##### #!/usr/bin/perl -w use strict; use warnings; use MatchVars; my ( $match, $pre, $post, $string ); MatchVars::tie( string => \$string, pre => \$pre, match => \$match, post => \$post ) || die "Can't tie matchvars"; $string = "This is a contrived test string..."; if ( $string =~ /contrived/) { print $pre,"\n"; print $match, "\n"; print $post, "\n"; } $string = 'and something else entirely'; if ( $string =~ m/thing/ ) { print $pre,"\n"; print $match, "\n"; print $post, "\n"; } __END__
In reply to Re: Tied scalars to emulate $&, $' and $` without global performance hit
by Anonymous Monk
in thread Tied scalars to emulate $&, $' and $` without global performance hit
by davido
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |