17.3.3 Обход списка пакетов

Итераторы весьма важны в пакете RPM2. Они предоставляют эффективный интерфейс к большим (в потенциале) наборам пакетов, а также итераторы более близки к реализации нижележащих функций в C API. Они просты для использования. Вызов процедуры next переводит нас к следующему в наборе пакету.

Например:

my $pkg_iter = $rpm_db->find_by_name_iter( "kernel" );

while (my $pkg = $pkg_iter->next() ) {

# Do something ...

}

Следующий листинг содержит скрипт (rpmname.pl), который работает подобно команде rpm q без прочих опций командной строки.

#!/usr/bin/perl

#

# Queries RPM database for given package.

# Usage:

# rpmname.pl package_name

#

use strict;

use RPM2;

my $rpm_db = RPM2->open_rpm_db( "-path" => "/var/lib/rpm" );

my $pkg_iter = $rpm_db->find_by_name_iter( $ARGV[0] );

while (my $pkg = $pkg_iter->next() ) {

print $pkg->tag("NAME"), "-", $pkg->tag("VERSION"), "\n";

}

$rpm_db->close_rpm_db();

При запуске скрипта ему необходимо передать имя пакета в качестве параметра. Например:

$ ./rpmname.pl kernel

kernel-2.4.18

Далее - Дополнительные функции поиска
Назад - Поиск пакетов
Содержание