in reply to Evaluate variable while using
If you are prepared to replace the string "Hello ".$a; with a function which constructs the string on-the-fly then:
my $x; my $str = sub { "hello ".${\$x} }; $x = 'kevin'; print $str->(); $x = 'chickenman'; print $str->();
This resembles hippo's Re: Evaluate variable while using (which is simpler as it achieves the same without the use of refs).
A more complete and acceptable solution would be to use an OO approach where a class holds the data and offers methods to update and print the data and any subsequent strings you may want to produce, i.e. $executable. This is a textbook usage for OO which keeps its data and its methods in their castle with crocodiles all around.
{package XYZ; sub new { my $class = shift; my $self = { homedir => '<empty>' }; return bless $self => $class } sub homedir { my $self = $_[0]; if( defined $_[1] ){ $self->{homedir} = $_[1] } return $self->{homedir} } sub executable { my $self = $_[0]; return $self->homedir()."/xyy/abc" +} 1; } my $xyz = new XYZ(); $xyz->homedir("ahah"); print "homedir: ".$xyz->homedir()."\n"; print "exec: ".$xyz->executable()."\n"; # note, when dealing with paths use File::Spec->catdir()
That's probably a good approach.
bw, bliako
|
|---|