package Foobar; my $var; # If called with no arguments, just returns the value. Otherwise sets and returns. sub foovar { $var = shift if @_; return $var; } # This version won't allow the value to be set twice sub foovar_once { die "Attempt to foovar more than once\n" if @_ && defined($var); $var = shift if @_; return $var; } 1;