ThomasXIII

Perl, elif и регэкспы.

2 сообщения в этой теме

Добрый день. Есть текстовый файл, из него надо выдернуть информацию разного рода. Есть переменная $state которая по заголовку определяет, что именно мы сейчас читаем. Далее из текущего состояния и соответствия регэкспу (между данными и заголовком есть ненужные строки) начинаем дергать данные. Есть 2 состояния: 'ts' и 'hs', данные соответствуют одному и тому же регэкспу (кривописанному, но пока стоит задача "чтобы работало хоть как-то"): /[A-Z_]+[\d\s]{7,}\d{0,3}\.\d{1,2}$/. Т.е. сперва имя заглавными буквами и подчерком, потом несколько столбцов цифр через пробельные символы затем число, отображающее проценты с одним или 2 знаками после запятой. Соответственно, есть кусок:

elsif ($state=="ts" and $str=~/[A-Z_]+[\d\s]{7,}\d{0,3}\.\d{1,2}$/)	{		#Делать дело	}elsif ($state=="hs" and $str=~/[A-Z_]+[\d\s]{7,}\d{0,3}\.\d{1,2}$/)	{		#Делать другое дело	}

В общем, структура данных одна, действия разные, в зависимости от заголовка. Беда в том, что вне зависимости от переменной $state при соответствии регэкспу все равно выполняется другой блок. Я даже вообще в коде исключил возможность переменной $state принимать значение 'hs', все равно при проверке попадаем в первый блок. Как это исправить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сам спросил, и сам нашел ответ. Заменил $state=="ts" на $state=~/ts/, и все заработало

Firebird понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас