Forum Webscript.Ru

Программирование => Perl => Тема начата: Skif от 24 Марта 2006, 00:59:04

Название: Глупый вопрос по условиям(if...case?).
Отправлено: Skif от 24 Марта 2006, 00:59:04
Предположим есть массив с некоторыми условиями (строками), который имеет свойство меняться. Мне необходимо выполнять проверку на наличие таких слов в строке (в частности в начале). Типичный пример, тот же /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 ((...)&&(...)) на что-то более гибкое ? Массив всн жн меняется (список читается банально из файла). Чувствую выход в регулярном выражении, но оно у меня не складывается... Ну ни как....
Название: Глупый вопрос по условиям(if...case?).
Отправлено: NeoNox от 24 Марта 2006, 01:11:49
my %vars = map { $_ = 1 } qw /все условия через пробел/;

if (!$vars{$_})
{
print $_;
}
Название: Глупый вопрос по условиям(if...case?).
Отправлено: Skif от 24 Марта 2006, 01:15:33
Балбес, пора идти спать...
Вопрос снят из-за глупости несусветной

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

еще никто не отменил. В сад, всем в сад... Надо идти спать, а не задавать глупые вопросы.
Название: Глупый вопрос по условиям(if...case?).
Отправлено: Skif от 24 Марта 2006, 01:17:59
NeoNox
Спасибо. Правда сам допер, когда взял в руки Programing Perl и открыл раздел с регулярными выражениями. Стыдно, чес слово...
Название: Глупый вопрос по условиям(if...case?).
Отправлено: NeoNox от 24 Марта 2006, 01:40:55
Skif это все-же несколько разные подходы.
Через хеш будет несколько быстрее.
Название: Глупый вопрос по условиям(if...case?).
Отправлено: Skif от 24 Марта 2006, 01:43:45
Да нет, я понял, просто вот этот вариант через регулярку... Блин, я придумывал, громоздил, а там все просто можно решить. Вариант через my %vars = map { $_ = 1 } он еще и красивее, но блин, как стыдно, что самый простой вариант, азы регулярных выражений забыть... блин. финиш.