# Return associative array of fields from control file $file. sub slurp { local ($file) = @_; local (%controlinfo); local (%ci); open (CONTROL, $file) || return 1; # Get entire text of control file. undef $/; $* = 1; $_ = ; # Join lines. s/\n[ \t]+/ /g; # Split on fields. %controlinfo = ('PRESTUFF', split (/^(\S+):\s*/)); $/ = "\n"; $* = 0; foreach $key (keys %controlinfo) { $key2 = $key; $key2 =~ y/A-Z/a-z/; chop ($controlinfo{$key}) if (/\n/); $ci{$key2} = $controlinfo{$key}; } return %ci; } $file = "/var/lib/dpkg/methods/hd/hd.status"; %info = slurp($file); $dpkg = "dpkg --auto --unpack --no-auto-select "; $dpkg .= "--refuse downgrade --skip-same-version"; system("$dpkg $info{'debdir'}");