while(my ($package) = keys(%found_packages)) { delete($found_packages{$package}); # Ignore already handled packages next if (defined($checked_packages{$package})); $checked_packages{$package} = 1; # Find the zypper information of the OS package my $cmd = "$ZYPPER info $package"; my ($stdout, $stderr, $exit_status) = capture { system($cmd); }; if ($exit_status == 0 && $stdout =~ /^Repository\s*:\s*(\S+)\s*$/m) { my $repository_name = $1; if ($repository_name eq '@System') { if (defined($packages_href->{$repository_name})) { $packages_href->{$repository_name}{'packages'}{$package}++; } else { $packages_href->{$repository_name} = { 'packages' => { $package => 1 } }; } } else { if (defined($packages_href->{$repository_name})) { $packages_href->{$repository_name}{'packages'}{$package}++; } else { $cmd = "$ZYPPER repos -u $repository_name 2> $DEV_NULL"; ($stdout, $stderr, $exit_status) = capture { system($cmd); }; if ($exit_status) { print("Failed to find the information of the zypper repository: $repository_name"); } else { my $repository_alias = $1 if ($stdout =~ /^Alias\s*:\s*(\S+)\s*$/m); my $repository_uri = $1 if ($stdout =~ /^URI\s*:\s*(\S+)\s*$/m); if (is_empty_str($repository_alias) || is_empty_str($repository_uri)) { print("Failed to find the uri or alias of the zypper repository: $repository_name"); next; } $packages_href->{$repository_name} = { 'alias' => $repository_alias, 'uri' => $repository_uri, 'packages' => { $package => 1 } }; } } } } }