donderdag 31 juli 2008

assign SCALAR to sub in perl...

You can try something like this:

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;

:)

Geen opmerkingen: