in reply to pci.ids to a complex data structure

I recommend that you consider using "use strict;" and "use warnings;". Your hash %pci_ids isn't even valid.
"9710", devices => { "NetMos Technology",
if you had turned on warnings, you would have gotten:
perl pci_ids.pl Odd number of elements in anonymous hash at pci_ids.pl line 4. Odd number of elements in anonymous hash at pci_ids.pl line 4. Reference found where even-sized list expected at pci_ids.pl line 4. $VAR1 = { 'HASH(0x1a62388)' => undef };
Also you are using curly braces where you should be using round braces - it should be:
%pci_ids = ( #or $pci_ids = {
In general it is advisable to use
use strict; use warnings;
and if you don't understand the error messages
use diagnostics;
which makes the error message a bit more verbose.