while ( ) { if ( isPrimary() ) { push @primary, $_; } elsif ( isSecondary() ) { push @secondary, $_; } elsif ( isTertiary() ) { push @{$secondary[$#secondary]}, $_; } } @primary = sort { $a cmp $b } @primary; @secondary = sort { $a cmp $b } @secondary; foreach $secondaryItem ( @secondary ) { @{$secondaryItem} = sort { $a cmp $b } @$secondaryItem; }