my @employees; # Defined elsewhere as array of Employee objects my $effect = Effect->new; $effect->set( salary => 1.02, '*' ); $_->apply_effect( $effect ) for @employees; #### my @employees; # Defined elsewhere as array of Employee objects $_->salary( $_->salary() * 1.02 ) for @employees; #### my $effect = Effect->new( [ salary => 1.02, '*' ] ); #### my @employess; # Defined elsewhere my $effect = Effect->new( [ salary => 1.02, '*' ], [ frobnitz => 1.5, '+' ], ); $_->apply_effect( $effect ) for @employees; #### my @employees; # Defined elsewhere for (@employees) { $_->salary( $_->salary() * 1.02 ); $_->frobnitz( $_->frobnitz + 1.5 ); } # Or if you want to keep closer to the old code and # live with O(2n) . . . $_->salary( $_->salary() * 1.02 ) for @employees; $_->frobnitz( $_->frobnitz + 1.5 ) for @employees; #### my $do_operation; # Defined elsewhere, possibly from user input my $by_ammount; # Also from user my @employees; # Also defined elsewhere my $op = $do_operation eq 'add' ? '+' : $do_operation eq 'mult' ? '*' : # And so on ; my $effect = Effect->new( [ salary => $by_ammount, $op ] ); $_->apply_effect( $effect ) for @employees;