2013-04-14 3 views
-1

Ищет ответ на этот вопрос, но не повезло. Позорно спрашиваю, потому что я думаю, что у меня нет чего-то фундаментального. Этот код является частью скрипта HTML + CGI, который загружает файл, извлекает его и затем отображает информацию в формате HTML из загруженного файла на основе выбора формы. Эта часть состоит в том, чтобы создать список .xml-файлов в каталоге с именем «mylogs», а затем удалить часть пути и добавить символы, чтобы сделать его действительной ссылкой HTTP.Perl regex и <character

Он работает до for (@array) {s/^/<a href="/};, и чем меньше символов вызывает проблема, потому что если я удалю его, он обработает все остальное. При включенном символе меньше всего он удаляется.

my $dir = "$upload_dir/var/mylogs"; 
my @array = <$dir/*.xml>; 
for (@array) {s/\/volume1\/web//g}; 
for (@array) {s/^/http:\/\/192.168.1.155/g}; 
for (@array) {s/^/<a href="/g}; 
for (@array) {s/$/<a\/>/g}; 

Я пробовал ускользнуть от персонажа, но не работал. Любые идеи, почему это происходит, или лучший способ достижения указанного конечного результата?

Спасибо за ваше время.

+0

'<' не имеет специального значения в регулярном выражении, но имеет смысл в HTML. Если вы просматриваете только результат в веб-браузере, вы ничего не увидите, потому что тег не завершен должным образом, как объяснил @Adrian Pronk. Просмотрите источник или запустите сценарий в терминале, чтобы узнать, что вы на самом деле генерируете в качестве вывода. – RickF

ответ

4

Вы не перекрывая тег правильно (и нет необходимости использовать /g модификатор, когда заменив ^ или $):

$_ = '/foo'; 
s/^/http:\/\/192.168.1.155/; 
    # Result is: http://192.168.1.155/foo 
s/^/<a href="/; 
    # Result is: <a href="http://192.168.1.155/foo 
s/$/<a\/>/; 
    # Result is: <a href="http://192.168.1.155/foo<a/> 
    # Should be: <a href="http://192.168.1.155/foo"> What do you want here? </a> 

ли вы на самом деле смотреть на источник HTML вы производства?

2

Вы не продемонстрировали свою проблему, и претензии, которые вы делаете, являются ложными.

$ perl -E' 
    my @array = qw(foo bar); 
    for (@array) {s/^/<a href="/g}; 
    say for @array; 
' 
<a href="foo 
<a href="bar