in reply to After changing registry values need to reboot systems

I don't know anything about shutting down, but it looks to me that you are clobbering part of your registry in the first part of your script. I've never used TieRegistry, so take this with skepticisim, but it looks like
$ms->{'Tcpip/'} = { 'Parameters/'=> ... };
will erase everything that's inside of Tcpip. Try:
$ms->{'Tcpip/'}{'Parameters/'}{'SearchList'} = ['test','REG_SZ'];
and
$ms->{'Tcpip/'}{'Parameters/'}{'DhcpDomain'} = ['','REG_SZ'];

You have
my $ms = $Registry->{'LMachine/SYSTEM/ControlSet001/Services/'};
twice. The second one is not needed. In fact, it should give you a warning.

Also, REG_SZ appears to the be default, so
$ms->{'Tcpip/'}{'Parameters/'}{'SearchList'} = 'test';
is sufficient.

So, the final script is:

use Win32::TieRegistry; my $ms = $Registry->{'LMachine/SYSTEM/ControlSet001/Services/'}; $ms->{'Tcpip/'}{'Parameters/'}{'SearchList'} = 'test; $ms->{'Tcpip/'}{'Parameters/'}{'DhcpDomain'} = ''; ...shutdown code...

or we could eliminate some redundancy:

use Win32::TieRegistry; my $ms = $Registry->{'LMachine/SYSTEM/ControlSet001/Services/'}; my $tcpip_param = $ms->{'Tcpip/Parameters/'}; $tcpip_param->{'SearchList'} = 'test; $tcpip_param->{'DhcpDomain'} = ''; ...shutdown code...