| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > ($a, $b, $c) = split /~/, $line |
| Автор: Suppir 2.4.2011, 19:31 |
| есть строки вида: приказ~N 100~01.02.2010~ приказ~N 110~02.02.2010~ т.е. сначала идет $тип, потом $номер, потом $дата. Разделителем служит символ "~", в конце строки также есть этот символ. Однако в строках могут быть пропущены какие-либо параметры: приказ~~02.02.2010~ приказ~N110~~ Необходимо из строки вытащить все переменные, какие есть. Пишу: ($type, $num, $date) = split /~/, $_ Однако в случае, если какого-нибудь параметра не хватает в строке, нужно, чтобы переменная принимала значение undef. Как это сделать? В настоящий же момент при отсутствии в строке, скажем, даты, переменная $date принимает значение "", т.е. пустой строке. А нужно undef. |
| Автор: Pfailed 2.4.2011, 21:41 |
| ($type, $num, $date) = "приказ~~02.02.2010~" =~ /([^~]+)?~([^~]+)?~([^~]+)?~/ |
| Автор: arto 2.4.2011, 22:55 |
| map { $_ || undef } |
| Автор: Suppir 3.4.2011, 09:08 | ||||
| Спасибо, оба варианта работают. Правда, с учетом того, что переменных всего 15, выглядят эти конструкции довольно страшно Но все равно лучше, чем потом для каждой переменной писать: if ($num ne ""){} else {} Еще вот что интересно. Если написать:
Разве это не эквивалентно
? Но ведь $num как раз defined и равен "". |
| Автор: mishnik 7.4.2011, 19:05 | ||||||||||||
я делаю так
и спокоен,если что не найдется, все нужно инициализировать! даже ссылки на массив и хэш
Добавлено @ 19:15 пиши яснее вот тест test_undef.t:
выдает
писать
дурной тон perlcritic не пропустит и заявит
|