in reply to Hashes of Arrays

I would trade in the three menu declarations for one with an extra hash level keyed by app name (or actually by lc $app):
my %Menu = { app1 => { label => "  A", MenuItems => [ @MenuItems ] }, app2 => { label => "  B", MenuItems => [ @MenuItems ] }, app3 => { label => "  C", MenuItems => [ @MenuItems ] }, };
Then replace other mentions of aMenu, etc. with Menu{lc_app}. For example:
foreach my $app (@sorted_applications) { $app = lc $app; push @{ $Menu{$app}{MenuItems} }, $app; }
Phil