Почему первая замена не имеет никакого эффекта? - PullRequest
0 голосов
/ 28 июня 2009

Скорее всего, я здесь упускаю что-то очевидное, но зачем мне дважды вызывать регулярное выражение поиска / замены, чтобы иметь какой-либо эффект в следующем коде? Если я позвоню только один раз, замена не состоится: - (

use strict;
use warnings;
use LWP::Simple;

my $youtubeCN = get(shift @ARGV);
die("Script tag not found!\n")
 unless $youtubeCN =~ /<script src="(.*?)">/;
my $youtubeScr = $1;
# WHY ???
$youtubeScr =~ s/&amp;/&/g;
$youtubeScr =~ s/&amp;/&/g;
my $gmodScr = get($youtubeScr);

$gmodScr =~ s/http:\/\/\?container/http:\/\/www.gmodules.com\/ig\/ifr\?/;
print "<script type=\"text/javascript\">$gmodScr</script>\n"; 

Обновление : я называю этот скрипт так:

perl bork_youtube_channel.pl 'http://www.youtube.com/user/pennsays'

Если amp не будет должным образом преобразован в &, я вернусь к HTML-странице (возможно, к странице с ошибкой), а не к Javascript на шаге 2.

Обновление : Оказывается, что URL был все-таки дважды закодирован. Спасибо всем за помощь!

1 Ответ

7 голосов
/ 28 июня 2009

Я подозреваю, что если вы посмотрите на входные данные, то делает , поступая правильно - я предполагаю, что в процессе кодирования и декодирования вы не видите реального ввода и вывода. Например, попробуйте это:

use strict;
use warnings;

my $youtubeScr = "a&amp;b";

$youtubeScr =~ s/&amp;/&/g;
print $youtubeScr;
print "\n";

$youtubeScr =~ s/&amp;/&/g;
print $youtubeScr;
print "\n";

Это печатает

a&b
a&b

Другими словами, с самого начала это уже работает.

Вы уверены, что ваш оригинальный текст не foo&amp;amp;bar? Это дало бы вывод

foo&amp;bar
foo&bar

с указанным кодом.

PS Мой перл-фу отстой. Извиняюсь за любые языковые злоупотребления в приведенном выше коде, но я думаю, что это все равно должно быть полезно:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...