use subAssign;
sub firstLine : lvalue {
tie my $dummy,subAssign,\@_,
sub {
$_[0]->[0]=~/^(.*?[.!?]+)/; $1
},
sub {
$_[0]->[0]=~s/^.*?[.!?]+/$_[1]->[0]/
};
$dummy
}
$text="I like apples! So let's go buy some!";
print firstLine($text);
$text="I like apples! So let's go buy some!";
firstLine($text)="I like bananas!!!";
print $text;
Which would print:
I like apples!I like bananas!!! So let's go buy some!
Now the package assignSub is this:
package subAssign;
sub TIESCALAR {
bless {argument => $_[1], get => $_[2], put => $_[3]}
}
sub FETCH {
&{$_[0]->{get}}($_[0]->{argument});
}
sub STORE {
&{$_[0]->{put}}($_[0]->{argument},[@_[1..$#_]])
}
package main;
1;
:)