use strict; use warnings FATAL => qw( all ); use Data::Dumper; $| = 1; $Data::Dumper::Deepcopy = 1; $Data::Dumper::Sortkeys = 1; local $\ = "\n"; my @laundry_loads = ( 'cottons', 'cold water items', 'sheets', 'uniforms', 'clothing of the day' ); my @laundry_tasks = ( 'wash', 'dry', 'fold' ); sub wash { my ( $load, $loads ) = @_; } sub dry { my ( $load, $loads ) = @_; } sub fold { my ( $load, $loads ) = @_; } my @progress = ( undef, undef, undef, ); my %task; foreach my $i ( 0 .. $#laundry_tasks ) { $task{ $laundry_tasks[$i] } = $i; } while ( my $load = shift @laundry_loads or scalar keys %task ) { print ""; foreach my $current_task ( reverse @laundry_tasks ) { if ( not scalar @laundry_loads and not(defined $task{$current_task} and defined $progress[ $task{$current_task} ] ) ) { delete $task{$current_task}; next; } if ( defined $progress[ $task{$current_task} ] ) { my $current_load = $progress[ $task{$current_task} ]; my $activity = qq{$current_task $current_load}; print $activity; if ( $current_task eq q{wash} and defined $progress[ $task{$current_task} ] ) { } if ( $current_task eq q{dry} and defined $progress[ $task{$current_task} ] ) { } if ( $current_task eq q{fold} and defined $progress[ $task{$current_task} ] ) { if ( $current_load =~ /sheets|uniforms|clothing of the day/ ) { my $new_load = $current_load eq 'sheets' ? 'laundry' : $current_load; print "put away $new_load"; } if ( $current_load eq 'sheets' ) { print 'vacuum the house'; print 'make the bed'; } if ( $current_load eq 'uniforms' ) { print 'take showers'; } pop @progress; } } } if ( defined $load ) { unshift @progress, $load; } else { unshift @progress, undef; } }