>
>foreach $k1 (keys %hash1) {
> # Убираем буквы все какие найдем. Результат в $k2
> ($k2 = $k1) =~ ( s/\D+//g ); # а если ID нечисловой ?
> # Смотрим в %hash2
> if ($hash2{$k2}) {
> # Есть соответствие в хеше %hash2. Что-то делаем
>
> # Например, это. Типа смотрим, есть ли значени
>в %hash1
> # соответствующее $k1 без буковок
> if ($hash1{$k2}) {
> # Есть соответствие в хеше %hash1.
>Что-то делаем
> ...
> } else {
> # Нет соответствия в хеше %hash1.
>Что-то делаем
> ...
> };
> ...
> } else {
> # Нет соответствия в хеше %hash2. Делаем что-то
>другое
> ...
> };
>};
>
>-----------------------------------
>
>Короче, ты подходишь к хешам, как к обычным массивам. Отсюда у тебя
>и тройная вложенность циклов. Как видишь, я обошелся одним циклом. Может
>я чего не понял ?
>
всё правильно ты понял ! это я туплю... :-)
Я понял свою ошибку, до этого времени я подходил к проблеме
как-бы глобально и далеко перешагнувши условие, а надо решать
задание чисто по-условию ! :-) вот такая у мя философия. :-)
>Теоретически, даже если есть ключи и пустые значения (типа "$hash{$key} eq ''
>" ), то все равно работать будет, только я не проверял.
>
>Учти, что если у тебя в %hash1 есть ключ типа '123qwe456asd', то
>в $k2 будет значение '123456'
>
>PS. Мой стиль тоже не блещет оптимизацией, как наследие от паскаля -
>уж больно многое я на нем мог сделать и на C
>переполз уже с устоявшимся стилем написания программ. Зато все просто и
>понятно. С этим согласился даже зубр написания всякой системной всячины под
>Linux :)
То что у тебя проги быстрые и легки в понимании я заметил,
но невсегда универсальны, например ($k2 = $k1) =~ ( s/\D+//g );
а если например это могут быть нечисловое значение в $k1 или в
перемешку, тоесть abc123asd или abcasd, а надо выделить окончание ?
Я думаю лучше писать скрипты с расчётом на будущее использование ! :-)
>
>PS2. Если дашь всю информацию про исходные данные и нужном результате, >то напишу весь скрипт.
скрипт в принципе написан, есть пару проблем при сравнении
строк через регексы, может ты сталкивался c таким деффектом,
когда в строке есть символы типа( ? +), и компил перла выдаёт ошибку при операциях
например:
$string1="Hallo C++ , Perl Cool ! ";
$string2="C++";
while($string1=~m/($string2)/gc)
{
....
}
Есть идея добавлять перед каждым плюсом знак \ (тоесть
$string1="Hallo C\+\+ , Perl Cool ! "; ) а потом уже сравнивать,
или может есть более универсальный метод сравнения строк ?