{ use parallizable; @ary = map { ... } # block 1 = grep { ... } # block 2 = map { ... } # block 3 LIST; } { for ( LIST ) { for ( do { block 1 } ) { next if not do { block 2 }; for ( do { block 3 } ) { push @ary, $_; } } } }