Perl: регулярное выражение s/// работает некорректно
скрипт выдает ошибку "Use of uninitialized value in substitution (s///) at ..."
my $data = $_;
s/^%\^//; # вот он сволочь - не хочет строку $data, начинающуюся с % делать нолем !!!
}
что могло случиться ? как это так я должен объявить регулярное выражение ?
оно работает абсолютно корректно. и делает именно то, что вы написали. я не знаю, что вы хотели сделать, а сделали вы вот что:
# тут я, непонятно на кой хрен,
#создал переменную $data, которая умрет по окончании цикла[/COLOR]
my $data = $_; [COLOR="#ff0000"]
# а тут я в переменной $_ удаляю стоящую
# в начале строки последовательность %^ [/COLOR]
s/^%\^//;
}
и в чем проблема? код отлично делает то, что вы запрограммировали.
my $a = "hello";
s/hello/bye/;
print $a;
вот такой вариант не заменит значение $a на "bye". В случае ключа "perl -w" - просто выведет ошибку и выведет hello, в случае "perl -X" - просто выведет hello. Почему ? Судя по всем докам - правильно. Но не работает.
Не ищите не грамотность - ее нельзя оценить по обрывку кода, ищите ошибку в синтаксисе, пожалуйста.
давайте я сам буду определять, что мне искать? у вас нету ошибок в синтаксисе. у вас есть ошибка в семантике.
Хорошо, перепишу еще проще:
my $a = "hello";
s/hello/bye/;
print $a;
вот такой вариант не заменит значение $a на "bye". В случае ключа "perl -w" - просто выведет ошибку и выведет hello, в случае "perl -X" - просто выведет hello. Почему ? Судя по всем докам - правильно. Но не работает.
я вас сильно удивлю, если скажу, что такой вариант и не должен менять значение $a на "bye"? попробуйте мне объяснить, в каком месте из трех строчек, вы применяете к переменной $a регулярное выражение?
кстати, с ключом -w будет выдана не ошибка, а предупреждение (warning)
Use of uninitialized value in substitution (s///) at -e line 2.
если взять словарь и перевести - никаких мыслей не появится?
оператор =~ тебе в помощь, автор ) (в случае номер 2)
в случае 1 - правильно тебе squirL сказал, "нафига-то я здесь создал переменную..."
и прежде, чем сказать "неучитеменяжить", смотрим на репутацию человека вам отвечающего... а то, смотрю, новички пошли - "помогите! прошуажнемогу!", а потом "а чо вы меня жить учите?!"... :)
вот то что я и хотел услышать. Просто в учебниках, по которым я учу Perl написан мой не рабочий вариант. Я задумывался над этим, но решил, что просто регулярное выражение работает над той переменной, которая была непосредственно до него. Спасибо.
оператор =~ тебе в помощь, автор ) (в случае номер 2)
в случае 1 - правильно тебе squirL сказал, "нафига-то я здесь создал переменную..."
и прежде, чем сказать "неучитеменяжить", смотрим на репутацию человека вам отвечающего... а то, смотрю, новички пошли - "помогите! прошуажнемогу!", а потом "а чо вы меня жить учите?!"... :)
я не неачитался шивочками-урывочками. Я очень внимательно прочитал две книги, просто я еще учусь и ни на что не претендую. Вы полагаете, что я должен тут только отвечать и ничего не спрашивать ? В книгах были некорректные примеры. Не надо пожалуйста оскорблять неразобравшись. Что касается "правильно тебе squirL сказал, "нафига-то я здесь создал переменную..."" - я разве невнятно написал, что там 100 строк кода вырезано ? Эта переменная уходит еще до знака } и внутренний цикл ее переписывает, после чего я опять к ней обращаюсь. Но для Вашего же удобства, чтобы Вы же не копались в моем гавне я это лишнее вырезал. Причем настолько, чтобы Вы одним взглядом поняли, где ошибка. Как оказалось я был прав - Вам было достаточно этого отрезка, чтобы направить меня на нужный путь, но обвинений я услышал как будто я Гитлер. Ладно, в следующий раз либо выставлю весь код на несколько сотен строк, либо вообще воздержусь от вопросов.
Спасибо за внимание
вы читаете плохие книги.
вот две книги, прочтения которых достаточно для грамотного программирования на Perl.
http://books.sysfaq.ru/Programming/Perl%20cookbook.DjVu
http://books.sysfaq.ru/Programming/Perl%20cookbook.DjVu
что касается моих ответов, то вы уж не обижайтесь, я не люблю давать ответы, от которых никакой пользы - вбил код и забыл. мне хотелось бы, чтобы вы сами додумались до правильного ответа. и поняли - почему так, а не иначе.
Кстати на вторую книгу ссылка от первой )))
P.S. я не обижаюсь
Кстати на вторую книгу ссылка от первой )))
P.S. я не обижаюсь
пардон, дал две ссылки на Cookbook. Вот основная книжка по Perl
http://books.sysfaq.ru/Programming/Perl_programming(camel%20book).djvu