|
Как организовать выборку ключа по условию больше или равно в BerkeleyDB |
[обсудить]
|
| Задача: выбрать запись с ключем большим или равным искомому, т.е. организовать выборку по промежутку значений:
... [Слишком большой объем текста. Скрыт. Для просмотра см. продолжение]
|
|
|
|
|
Как получить бинарный дамп хеша или массива на Perl |
[обсудить]
|
| use Storable;
Запись/чтение дампа в файл.
store (\%table, 'file'); $hashref = retrieve('file');
lock_store (\%table, 'file'); $hashref = lock_retrieve('file');
Запись/чтение дампа в ранее открытый файл.
store_fd (\%table, \*FILE); $hashref = fd_retrieve(\*FILE);
Запись/чтение дампа в скалярную переменную
(удобно для использования для привязки сложной структуры к ключу в DB_File или BerkeleyDB).
$hash_dump = freeze (\%table); $hash_ref = thaw($hash_dump);
Если нужно получить дамп в символьном "perl sources"-виде для использования в
eval или print: use Data::Dumper;
|
|
|
|
|
Как сразу выделить память под хэш в Perl до его заполнения. |
[комментарии]
|
| Определяем, что хэш будет содержать около 100 записей:
keys( %hash ) = 100;
|
|
|
|
|
Обращение к DB файлам в Perl как к хэшам. |
[обсудить]
|
| use DB_File;
$db_hashinfo = new DB_File::HASHINFO;
$db_hashinfo->{'cachesize'} = 100000;
$dbobj = tie(%hash, "DB_File", "somefile.db", O_RDWR|O_CREAT, 0644, $db_hashinfo ))||die "Error";
$dbobj->del($key);
$dbobj->sync();
untie %hash;
Для доступа к хранилищам Berkeley DB версии 2,3 и 4 нужно использовать модуль BerkeleyDB.
|
|
|
|
|
Как вывести содержимое хеша с сортировкой по ключу или данным. |
[обсудить]
|
| Сортировка по ключу:
foreach $key (sort keys %hash){ }
Сортировка по данным сопоставленым с ключом:
foreach $key (sort { $hash{$a} cmp $hash{$b} } keys %hash){ }
Если сортировка осуществляется над строковыми данными используем "cmp", если
над цифровыми - "<=>".
Для сортировки в обратном порядке пишем "reverse sort".
|
|
|
|
|
Как организовать хэш элементами которого являются хэши (хэш хэшей) |
[комментарии]
|
| %a=(
"test1" => {
"TITLE" => "incoming",
"HEADER" => "Hi"
},
"test2" => {
"TITLE" => "outgoing"
}
)
$s = $a{"test1"}{"TITLE"};
print "$s\n";
|
|
|
|
|
Как организовать массив элементами которого являются массивы |
[обсудить]
|
| @a=(["a","b","c"],["d","e"],["f"]);
foreach $b (@a){
foreach $c (@$b){
print "$c\n";
}
print "====\n";
}
$z=$a[1][1];
print "--$z\n";
|
|
|
|
|
Как узнать число элементов массива |
[комментарии]
|
| @array=();
$n = $#array; # это номер последнего индекса, число записей - scalar @array;
Если $n = -1 - то массив пустой, если $n = 0 - в массиве 1 элемент и т.д.
|
|
|
|
|
Как в качестве значения в ассоциацтивном массиве использовать обычный массив. |
[обсудить]
|
| %ass=( "login" => ["test", 32, 2]);
Для доступа к элементам массива используем:
@{$ass{"login"}}[0]; # test
@{$ass{"login"}}[1]; # 32
@{$ass{"login"}}[2]; # 2
|
|
|
|
|
Как в Perl получить элемента массива имя которого находится в переменной |
[обсудить]
|
| Реальный массив:
%form_test = ('a' => 1);
Переменаня
$name="test";
Генерируем ссылку на массив:
$tmp = eval "\\\%form_$name";
Вычилсяем хначение элемента массива:
$key_val = $$tmp{"a"};
|
|
|
|