Модераторы: ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование $& для получения результата, При несовпадении $& сохраняет значение 
V
    Опции темы
FiMa1
Дата 11.1.2010, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: нет
Всего: 6



Ребята, привет всем!

Мне нужна ваша помощь в очень простом вопросе.

Есть содержимое файла:
Код

string1
  string2
string3

Есть скрипт, работающий с этим файлом:
Код

if(scalar(@ARGV) == 0) {
    print "None of file paths is specified!";
    exit;
}
# for all the specified files
for ($i = 0; $i < @ARGV; $i++) {
    $file_path = $ARGV[$i];
    open(IN, $file_path) || die; # read next file
    while ($line = <IN>) {
        $line =~ m/^[^\s].+$/;
        print $& . "\n";
     }
     close (IN);
}

Соответственно, после выполнения скрипта я ожидаю вывод:
Код

string1
string3

Вместо этого получаю
Код

string1
string1
string3

Так как во втором проходе условие регулярного выражения не выполняется, то переменная $& сохраняет свое значение от предыдущего прохода ("string1"), что и выводится на печать.

Вопрос: как правильно поступать в подобных случаях? Очистить содержимое переменной $& невозможно, она readonly. Подскажите, пожалуйста, никак не могу найти этого в справочниках.

Это сообщение отредактировал(а) FiMa1 - 11.1.2010, 19:36
PM   Вверх
ming
Дата 11.1.2010, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 30.1.2009
Где: Новосибирск

Репутация: 1
Всего: 3



оператор =~ возвращает 1 (истину) если строка совпала с шаблоном:

Код

while ($line = <IN>) {
        if ($line =~ m/^[^\s].+$/) {
                print $& . "\n";
        }
}


Это сообщение отредактировал(а) ming - 11.1.2010, 21:03
PM MAIL ICQ Jabber   Вверх
FiMa1
Дата 11.1.2010, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: нет
Всего: 6



Цитата(ming @ 11.1.2010,  21:02)
оператор =~ возвращает 1 (истину) если строка совпала с шаблоном

Круто! ming, спасибо за помощь! Похоже то, что нужно.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема »


 




[ Время генерации скрипта: 0.0412 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.