in reply to Finding installed program version in Win32 registry
There is a useful technique for dealing with this kind of variably ordered input. It revolves around placing captures inside lookahead assertions.
Because the lookahead assertions do not alter pos, the captured fields are placed into the capture variables ($1, $2, $3 ... ), in the same order, regardless of the order in which that information appears in the input. This is very useful as it greatly simplifies the subsequent processing.
The following example I've re-ordered the two fields of interest in three copies of the sample data, and the output shows that the two fields (DisplayName & DisplayVersion) have been assigned to $1 & $2 respectively, regarless of their relative positioning in the input record.
This demo use "paragraph mode", ($/ = '';) which assumes that the records are separated by one or more blank lines:
#! perl -sw use 5.010; use strict; $/ = ''; ## Paragraph mode while( <DATA> ) { m[ (?= ^ .*? DisplayName \s+ \S+ \s+ ( [^\n]+ ) \n ) (?= ^ .*? DisplayVersion \s+ \S+ \s+ ( [^\n]+ ) \n ) ]xsm and say "Name: $1 Version $2"; }
__END__ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall +\{AC76BA86-7AD7-1033-7B44-A80000000002} AuthorizedCDFPrefix REG_SZ Comments REG_SZ Contact REG_SZ Customer Support DisplayVersion REG_SZ 8.0.0 HelpLink REG_EXPAND_SZ http://www.adobe.com/support/main.htm +l HelpTelephone REG_SZ InstallDate REG_SZ 20080326 InstallLocation REG_SZ InstallSource REG_SZ C:\SWTOOLS\APPS\Adobe\AdbeRdr80\EN\ ModifyPath REG_EXPAND_SZ MsiExec.exe /I{AC76BA86-7AD7-1033-7 +B44-A80000000002} NoRepair REG_DWORD 0x1 Publisher REG_SZ Adobe Systems Incorporated Readme REG_EXPAND_SZ C:\Program Files\Adobe\Reader 8.0\Reade +r\Readme.htm Size REG_SZ EstimatedSize REG_DWORD 0x13b54 UninstallString REG_EXPAND_SZ MsiExec.exe /I{AC76BA86-7AD7-1 +033-7B44-A80000000002} URLInfoAbout REG_SZ http://www.adobe.com URLUpdateInfo REG_SZ http://www.adobe.com/products/acrobat/r +eadstep.html VersionMajor REG_DWORD 0x8 VersionMinor REG_DWORD 0x0 WindowsInstaller REG_DWORD 0x1 Version REG_DWORD 0x8000000 Language REG_DWORD 0x409 DisplayName REG_SZ Adobe Reader 8 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall +\{AC76BA86-7AD7-1033-7B44-A80000000002} AuthorizedCDFPrefix REG_SZ Comments REG_SZ Contact REG_SZ Customer Support HelpLink REG_EXPAND_SZ http://www.adobe.com/support/main.htm +l HelpTelephone REG_SZ InstallDate REG_SZ 20080326 InstallLocation REG_SZ InstallSource REG_SZ C:\SWTOOLS\APPS\Adobe\AdbeRdr80\EN\ ModifyPath REG_EXPAND_SZ MsiExec.exe /I{AC76BA86-7AD7-1033-7 +B44-A80000000002} NoRepair REG_DWORD 0x1 Publisher REG_SZ Adobe Systems Incorporated Readme REG_EXPAND_SZ C:\Program Files\Adobe\Reader 8.0\Reade +r\Readme.htm Size REG_SZ EstimatedSize REG_DWORD 0x13b54 UninstallString REG_EXPAND_SZ MsiExec.exe /I{AC76BA86-7AD7-1 +033-7B44-A80000000002} URLInfoAbout REG_SZ http://www.adobe.com URLUpdateInfo REG_SZ http://www.adobe.com/products/acrobat/r +eadstep.html VersionMajor REG_DWORD 0x8 VersionMinor REG_DWORD 0x0 WindowsInstaller REG_DWORD 0x1 Version REG_DWORD 0x8000000 Language REG_DWORD 0x409 DisplayName REG_SZ Adobe Reader 8 DisplayVersion REG_SZ 8.0.0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall +\{AC76BA86-7AD7-1033-7B44-A80000000002} DisplayName REG_SZ Adobe Reader 8 AuthorizedCDFPrefix REG_SZ Comments REG_SZ Contact REG_SZ Customer Support DisplayVersion REG_SZ 8.0.0 HelpLink REG_EXPAND_SZ http://www.adobe.com/support/main.htm +l HelpTelephone REG_SZ InstallDate REG_SZ 20080326 InstallLocation REG_SZ InstallSource REG_SZ C:\SWTOOLS\APPS\Adobe\AdbeRdr80\EN\ ModifyPath REG_EXPAND_SZ MsiExec.exe /I{AC76BA86-7AD7-1033-7 +B44-A80000000002} NoRepair REG_DWORD 0x1 Publisher REG_SZ Adobe Systems Incorporated Readme REG_EXPAND_SZ C:\Program Files\Adobe\Reader 8.0\Reade +r\Readme.htm Size REG_SZ EstimatedSize REG_DWORD 0x13b54 UninstallString REG_EXPAND_SZ MsiExec.exe /I{AC76BA86-7AD7-1 +033-7B44-A80000000002} URLInfoAbout REG_SZ http://www.adobe.com URLUpdateInfo REG_SZ http://www.adobe.com/products/acrobat/r +eadstep.html VersionMajor REG_DWORD 0x8 VersionMinor REG_DWORD 0x0 WindowsInstaller REG_DWORD 0x1 Version REG_DWORD 0x8000000 Language REG_DWORD 0x409
Output:
c:\test>755675.pl Name: Adobe Reader 8 Version 8.0.0 Name: Adobe Reader 8 Version 8.0.0 Name: Adobe Reader 8 Version 8.0.0
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Finding installed program version in Win32 registry
by 1Nf3 (Pilgrim) on Apr 06, 2009 at 11:46 UTC | |
by BrowserUk (Patriarch) on Apr 06, 2009 at 12:01 UTC |