Forum Webscript.Ru
Программирование => Perl => Тема начата: 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 ((...)&&(...)) на что-то более гибкое ? Массив всн жн меняется (список читается банально из файла). Чувствую выход в регулярном выражении, но оно у меня не складывается... Ну ни как....
-
my %vars = map { $_ = 1 } qw /все условия через пробел/;
if (!$vars{$_})
{
print $_;
}
-
Балбес, пора идти спать...
Вопрос снят из-за глупости несусветной
if ($_ !~ m/^($pattern|$pattern2)/g) {
.......
}
еще никто не отменил. В сад, всем в сад... Надо идти спать, а не задавать глупые вопросы.
-
NeoNox
Спасибо. Правда сам допер, когда взял в руки Programing Perl и открыл раздел с регулярными выражениями. Стыдно, чес слово...
-
Skif это все-же несколько разные подходы.
Через хеш будет несколько быстрее.
-
Да нет, я понял, просто вот этот вариант через регулярку... Блин, я придумывал, громоздил, а там все просто можно решить. Вариант через my %vars = map { $_ = 1 } он еще и красивее, но блин, как стыдно, что самый простой вариант, азы регулярных выражений забыть... блин. финиш.