sub toggle_door { my $door_ref = shift; if( $$door_ref eq 'Closed' ) { $$door_ref = 'Open'; } else { $$door_ref = 'Closed'; } return $$door_ref; } #### sub toggle_door { my ($door_ref) = @_; state $transition = { qw(Open Closed Closed Open) }; $$door_ref // die 'undefined door state'; exists $transition->{$$door_ref} or die qq{unknown door state '$$door_ref'}; return $$door_ref = $transition->{$$door_ref}; } #### sub toggle_door { state $transition = { qw(Open Closed Closed Open) }; $_[0] // die 'undefined door state'; exists $transition->{$_[0]} or die qq{unknown door state '$_[0]'}; return $_[0] = $transition->{$_[0]}; }