PERL - статьи




Сортировки - часть 2


%allhash = (%hash1, %hash2);

Чтобы сэкономить память, можно воспользоваться таким кодом:

%hash=();

while (($key, $values) = each(%hash1)){

$hash{$key} = $values;

}

while (($key, $values) = each(%hash2)){

$hash{$key} = $values;

}

Пример работы с хэшем и базой данных из (cм. ответ):

VS> Скажите, можно ли ввести в dbm-базу данных уже заполненный значениями

VS> хеш? Если да, то как?

%hash1=("dfadf", "dfadfd");

dbmopen (%hash, "hash", 0666);

%hash=%hash1;

dbmclose (%hash);

Как передать хэш в функцию? (см. всю дискуссию)

> PK> Вобщем то все передаеться, но использовать его нельзяю

> PK> Hа %_[0] или $_[0]{??} компилер ругаеться.

> %a;

> &f(\%a);

> sub f {

> my $a = $($_[0]){'key'};

> }

> кажется так, мог ошибится в написании. Смысл в передаче ссылки, а не значения.

Это можно сделать также:

1. Неявной передачей ссылки (использование прототипов):

sub f(\%) {

my $a=$_[0]->{'key'};

}

f(%a);

2. Передачей хэша как массива с четным числом

элементов:

sub f {

my $a={@_}->{'key'};

}

f(%a);

Пример использования хеша для транслитерации :

RK> Как сочнить такой tr/../../ (и возможно ли), чтобы

RK> "аб я" -> "abyoya"

RK> Т.е. транслитерацию сделать...

самый простой и топорный вариант - сделать хеш

с соответствиями типа я => ya сплитить строчки и заменять элементы

полученного массива на нужные. что-то на подобие:

@letters = split //, $str;

for (@letters){$_ = $hash{$_}};




Содержание  Назад  Вперед