my $foo; my $foo_new; sub fooz : lvalue { $foo; } $foo = "Bar"; # Initialization print fooz,"\n"; # Reading fooz = "Foo"; # Assignment print fooz,"\n"; # Reading #### my $foo; my $foo_new; sub fooz : lvalue { defined ($foo_new)? $foo_new : (islvalue? $foo_new = $foo : $foo); } $foo = "Bar"; # Initialization print fooz,"\n"; # Reading fooz = "Foo"; # Assignment print fooz,"\n"; # Reading