![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
есть строки вида:
приказ~N 100~01.02.2010~ приказ~N 110~02.02.2010~ т.е. сначала идет $тип, потом $номер, потом $дата. Разделителем служит символ "~", в конце строки также есть этот символ. Однако в строках могут быть пропущены какие-либо параметры: приказ~~02.02.2010~ приказ~N110~~ Необходимо из строки вытащить все переменные, какие есть. Пишу: ($type, $num, $date) = split /~/, $_ Однако в случае, если какого-нибудь параметра не хватает в строке, нужно, чтобы переменная принимала значение undef. Как это сделать? В настоящий же момент при отсутствии в строке, скажем, даты, переменная $date принимает значение "", т.е. пустой строке. А нужно undef. Это сообщение отредактировал(а) Suppir - 2.4.2011, 19:47 |
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
($type, $num, $date) = "приказ~~02.02.2010~" =~ /([^~]+)?~([^~]+)?~([^~]+)?~/
|
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
map { $_ || undef }
|
|||
|
||||
| Suppir |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
Спасибо, оба варианта работают. Правда, с учетом того, что переменных всего 15, выглядят эти конструкции довольно страшно
Но все равно лучше, чем потом для каждой переменной писать: if ($num ne ""){} else {} Еще вот что интересно. Если написать:
Разве это не эквивалентно
? Но ведь $num как раз defined и равен "". Это сообщение отредактировал(а) Suppir - 3.4.2011, 09:14 |
||||
|
|||||
| mishnik |
|
||||||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 6.3.2011 Репутация: 1 Всего: 1 |
я делаю так
и спокоен,если что не найдется, все нужно инициализировать! даже ссылки на массив и хэш
Добавлено @ 19:15 пиши яснее вот тест test_undef.t:
выдает
писать
дурной тон perlcritic не пропустит и заявит
Это сообщение отредактировал(а) mishnik - 7.4.2011, 19:16 |
||||||||||||
|
|||||||||||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |