Автор Тема: Глупый вопрос по условиям(if...case?).  (Прочитано 4178 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Skif

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 187
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Предположим есть массив с некоторыми условиями (строками), который имеет свойство меняться. Мне необходимо выполнять проверку на наличие таких слов в строке (в частности в начале). Типичный пример, тот же /etc/fstab  или /etc/mtab Где присутствует список вида
Цитировать

# Device                Mountpoint      FStype  Options         Dump    Pass#  
/dev/ad0s1b             none            swap    sw              0       0  
/dev/ad0s2b             none            swap    sw              0       0  

Мне необходимо убирать строки из , ну например вывода а STDOUT.
тобишь, пусть имеем массив с такими строковыми переменными, строки из файла содержащих их нельзя выводить.

@arr = (\'\\n\',\'#\',\'/dev/hda1\',\'pupkin\',\'estche_chto_to\',\'Nu_i_tut_chego_to\');

Теперь делаю вывод из файла:
Цитировать

my @arr = (\'\\n\',\'#\',\'/dev/hda1\',\'pupkin\',\'estche_chto_to\',\'Nu_i_tut_chego_to\');

open (F, /path_to_file) || die "Can not open file!\\exit!\\n" ;
while (){
  if (($_ !~ m/^$arr[0]/g) && ($_ !~ m/^$arr[1]/g) && ($_ !~ m/^$arr[2]/g) && ($_ !~ m/^$arr[3]/g) && ($_ !~ m/^$arr[4]/g) && ($_ !~ m/^$arr[5]/g)) {
       print $_;
}
}
close (F);


Но как видно из кода мне смысла никакого от этого массива - так как пересиления условий приходиться делать руками, а у меня они время от времени меняются. Не хочется каждый раз править код, да и не только я буду им пользоваться, в конце концов. Можно ли как-то красиво заменить кучу if ((...)&&(...)) на что-то более гибкое ? Массив всн жн меняется (список читается банально из файла). Чувствую выход в регулярном выражении, но оно у меня не складывается... Ну ни как....
Всё будет хорошо - я договорился!

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Глупый вопрос по условиям(if...case?).
« Ответ #1 : 24 Марта 2006, 01:11:49 »
my %vars = map { $_ = 1 } qw /все условия через пробел/;

if (!$vars{$_})
{
print $_;
}
The documentations is your friend

Оффлайн Skif

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 187
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Глупый вопрос по условиям(if...case?).
« Ответ #2 : 24 Марта 2006, 01:15:33 »
Балбес, пора идти спать...
Вопрос снят из-за глупости несусветной

if ($_ !~ m/^($pattern|$pattern2)/g) {
.......
}

еще никто не отменил. В сад, всем в сад... Надо идти спать, а не задавать глупые вопросы.
Всё будет хорошо - я договорился!

Оффлайн Skif

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 187
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Глупый вопрос по условиям(if...case?).
« Ответ #3 : 24 Марта 2006, 01:17:59 »
NeoNox
Спасибо. Правда сам допер, когда взял в руки Programing Perl и открыл раздел с регулярными выражениями. Стыдно, чес слово...
Всё будет хорошо - я договорился!

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Глупый вопрос по условиям(if...case?).
« Ответ #4 : 24 Марта 2006, 01:40:55 »
Skif это все-же несколько разные подходы.
Через хеш будет несколько быстрее.
The documentations is your friend

Оффлайн Skif

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 187
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Глупый вопрос по условиям(if...case?).
« Ответ #5 : 24 Марта 2006, 01:43:45 »
Да нет, я понял, просто вот этот вариант через регулярку... Блин, я придумывал, громоздил, а там все просто можно решить. Вариант через my %vars = map { $_ = 1 } он еще и красивее, но блин, как стыдно, что самый простой вариант, азы регулярных выражений забыть... блин. финиш.
Всё будет хорошо - я договорился!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28