#!perl use warnings; use strict; use Data::Dumper; my $Registry; use Win32::TieRegistry ( Delimiter=>"/", ArrayValues=>1, TiedRef => \$Registry, ); my @install_names; foreach my $software ( values %{$Registry->{'HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Uninstall/'}} ) { next unless my $software = $software->{DisplayName}; next unless $software->[0]; push @install_names, $software->[0]; } print "$_\n" for sort {lc $a cmp lc $b} @install_names;