2011-10-10 87 views

回答

7

我想你可以隨時使用rpm命令:

$ rpm --query --all --qf "%-30{NAME} - %{VERSION}\n" 

然後,您可以在各種不同的方式使用:

use autodie; 
open my $RPM_FH, "-|", qq(rpm --query --all --qf "%-30{NAME} - %{VERSION}\n"); 
my @rpmLines = <$RPM_FH>; 
close $RPM_FH; 

或者:

my @rpmLines = qx(rpm --query --all --qf "%-30{NAME} - %{VERSION}\n"); 

我也找到了RPM::Database這將是一種更加Perlish的做事方式。該軟件包捆綁RPM數據庫中的散列:

use RPM::Database; 

tie %RPM, "RPM::Database" or die "$RPM::err"; 

for (sort keys %RPM) 
{ 
    ... 
} 

我從來沒有使用過,所以我不知道它究竟會如何運作。例如,我假定每個散列條目的值是某種數據庫對象。例如,我會假設知道RPM包中的版本號和文件非常重要,並且必須有一些信息可以被提取,但我在RPM::DatabaseRPM::HEader中沒有看到任何內容。玩它。您可以使用Data::Dumper來幫助探索返回的對象。

警告:使用Data::Dumper來幫助探索對象和類中的信息。不要用它來弄清楚如何直接從對象中獲取信息。使用正確的方法和類。

4

最簡單的方法可能是甩出rpm程序。

chomp(my @rpms = `rpm -qa`); 
+0

+1打我吧... – gsiems

1

取決於如何解釋你的問題,正確的答案可以是:

rpm -qR perl