2012-05-01 2 views
2

Я хочу вывести в одной строке, которая отлично теперь, как:печать одной линии несколько раз в Perl

print "$a\t" x 99; 
print "$b\n"; 

Так выше, как одна строка выглядит. Но я также хочу напечатать эти строки $c раз. Есть ли ярлык, чтобы сделать это, а не использовать для петель как:

for ($i = 1; $i <= $c; $i++) { 
    print "$a\t" x 99; 
    print "$b\n"; 
} 

Есть ли более простые способы сделать так, как "$a\t" x 99?

+2

Обратите внимание, что ['$ a'] (http://perldoc.perl.org/perlvar.html#%24a) и [' $ b'] (http://perldoc.perl.org/perlvar. html #% 24b) являются плохими выборами для имен переменных в perl, даже в примерах отбрасывания, из-за их [specialness] (http://perldoc.perl.org/perlvar.html#%24a). – pilcrow

+0

Цикл * C-style * for почти никогда не используется в Perl. Вместо этого используйте 'for (LIST) {..}'. – Borodin

ответ

7
for (1 .. $how_many) { print "$foo\t" x 99, "$bar\n"; } 

ИМО проще, чем C-стиль для (;;) петли.

+0

На самом деле это предпочтительнее '((($ a \ t" x 99). "$ B \ n") x $ c) ', потому что это не увеличивает использование памяти, создавая потенциально большой список для прохождения для 'print'. –

+1

Если мы говорим о оптимизации, цикл 'while' также избегает создания списка чисел для цикла. Например. 'print ... while $ i ++ <= $ how_many' – TLP

+2

@TLP: вы очень устарели! 'perlop' (Операторы диапазона) говорит: * В текущей реализации временный массив не создается, когда оператор диапазона используется как выражение в циклах foreach *. – Borodin

4

Да, и у вас уже есть все необходимое для этого.

print ((("$a\t" x 99)."$b\n") x $c); 
Смежные вопросы