sub error :lvalue { $error_string; } error() = "This is error 1\n"; while(1) { print error(), "\n"; # Code somewhere else assigns a new value # to error() (perhaps in a callback?) # The next time error is called, it prints # a different value. }