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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите пожалуйста! Срочно! Почему эта строчка не работает? 
V
    Опции темы
max1mus
  Дата 4.12.2007, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Почему дання строчка не работает: print m%^(?<=($path))[^/]%; ?
Ошибку не выдает, но и не выводит ничего. В переменной $_ находится очередная строчка из файла, например "/abc/cba/123.txt".
Переменная $path в начале содержит "/".

Это сообщение отредактировал(а) max1mus - 4.12.2007, 22:01
PM MAIL   Вверх
JAPH
Дата 4.12.2007, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А чего вы добиваетесь? ^(?<=...) - В начале строки, перед которым стоит $path... Это как? Совпадение никогда не произойдёт ($path непустая, правда?)


--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
max1mus
  Дата 5.12.2007, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хм... т.е. мнимый символ ^ работает на конструкцию [^/], а не на (?<=...) ?
Жлаь... а как мне можно воплотить это в жизнь? Задача такая, приведу пример: $_="/abc/cba/123.txt" $path="/abc/"
что нужно написать, чтобы эта команда вернула мне "cba"?
PM MAIL   Вверх
amg
Дата 5.12.2007, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 38
Всего: 50



Код

print $1 if m|^$path([^/]+)|; # Самое простое, понятное и быстрое
m|(?<=^$path)[^/]+| && print $&; # Расширенный синтаксис замедляет
print m|^$path([^/]+)|;
print m|(?<=^$path)([^/]+)|;

Кстати, последние два варианта могут ввести в заблуждение и ими лучше не пользоваться, или все время помнить, что какие функции вынуждает свои аргументы возвращать по возможности списковый контекст (print в их числе, что не очевидно), а какие нет. Например,
Код

print m|^$path([^/]+)|; # Напечатает "cba"
print length m|^$path([^/]+)|; # Напечатает 1, а не 3



Это сообщение отредактировал(а) amg - 5.12.2007, 07:43
PM MAIL   Вверх
max1mus
  Дата 5.12.2007, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



АААгромное спасибо! Работает  smile Как я только не додумался...  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




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


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

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