как заставить perl повторить все предложение с каждой переменной - PullRequest
1 голос
/ 21 июля 2011
#! /usr/bin/perl 
@no = (1 .. 20000); 
foreach(@no) { 
print "<div id=\"world@no\" onclick=\"javascript:showDiv_postscreen(); javascript:hideDiv_welcomebuttons()\">&nbsp;</div>\n"; 
} 

Это мой Perl-скрипт, но как мне заставить его каждый раз переписывать предложение новой переменной?

т.е. как я могу получить его на выходе

<div id="world1" onclick="javascript:showDiv_postscreen(); javascript:hideDiv_welcomebuttons()">&nbsp;</div>
.
.
.
<div id="world20000" onclick="javascript:showDiv_postscreen(); javascript:hideDiv_welcomebuttons()">&nbsp;</div>

Ответы [ 5 ]

3 голосов
/ 21 июля 2011

Ваша основная проблема - интерполировать весь массив в вашу строку вместо переменной цикла ($_ в вашем случае, так как вы не указали один, но я предпочитаю дать ему имя).

Вы можете избежать экранирования " s, используя другой разделитель для вашей строки:

use strict;
use warnings;
for my $world_no (1..20000) {
    print qq!<div id="world$world_no" onclick="showDiv_postscreen(); hideDiv_welcomebuttons()">&nbsp;</div>\n!;
}

Кроме того, «javascript:» необходим только для таких вещей, как <a href="...">, где ожидается URL-адрес, и вы хотите вместо этого предоставить код javascript. Это не нужно для onclick, конечно, не дважды.

1 голос
/ 21 июля 2011
#!/usr/bin/perl 
my @no = (1 .. 20000); 
foreach my $i (@no) { 
    print "<div id=\"world$i\" onclick=\"javascript:showDiv_postscreen(); javascript:hideDiv_welcomebuttons()\">&nbsp;</div>\n"; 
}
1 голос
/ 21 июля 2011
#! /usr/bin/perl
@no = (1 .. 20);
foreach $x (@no) {
print "<div id=\"world$x\" onclick=\"javascript:showDiv_postscreen()\;javascript:hideDiv_welcomebuttons()\">&nbsp;</div>\n";
}
0 голосов
/ 21 июля 2011

Я бы рассмотрел использование переменной для подсчета вместо определения диапазона.Это может показаться менее интуитивным, но это не так.

Кроме того, вместо экранирования двойных кавычек (\"), вы можете использовать qq(), что эквивалентно.

my $i = 1;
print qq(<div id="world$i" onclick="javascript:showDiv_postscreen(); javascript:hideDiv_welcomebuttons()">&nbsp;</div>\n) while ($i++ <= 20_000);
0 голосов
/ 21 июля 2011

@ в операторе печати сбивает с толку переводчика.Кроме того, это не то, что вы хотите, так как print "@no" напечатает то же самое, что и join(' ',@no).Вместо этого вы хотите интерполировать каждый элемент @no в выводимую строку:

#! /usr/bin/perl 
use strict;
use warnings; #Always use these!
my @no = (1 .. 20000); 
foreach(@no) { 
print "<div id=\"world" . $_ . "\" onclick=\"javascript:showDiv_postscreen(); javascript:hideDiv_welcomebuttons()\">&nbsp;</div>\n"; 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...