Perl循环程序

时间:2013-10-10 18:38:04

标签: perl

我正在尝试编写一个程序来完成以下任务:

  

使用循环结构并编写产生以下输出的程序(使用一个参数让用户指定需要打印的行数):

A
AA
AAA
AAAB
AAABA
AAABAA
AAABAAA
AAABAAAB
...

无论如何,我无法让我的程序正常运行。我觉得我很接近但是当我尝试运行它时,没有任何反应......有什么建议吗?

#!/usr/local/bin/perl

$A = 3;
$B = 1;
$i = 1;
$output = "";
$j = 1;

while ($i <= $ARGV[0]) {
  while ($j <= $i) {
    if ($A == 0 && $B == 0) {
      $A = 3;
      $B = 1;
    }

    if ($A > 0) {
      $output.= "A";
      $A--;
    }
    else {
      $output.= "B";
      $B--;
    }

    &j++;
  }

  print($output  .  "/n");
  $i++;
}

3 个答案:

答案 0 :(得分:2)

当我运行它时,我收到此错误:

  

无法在行...

修改非左值子程序调用

你使用了错误的印记。变化:

&j++;

为:

$j++;

此外,您可能需要\n而不是/n

答案 1 :(得分:0)

这个程序就像你问的那样。它希望列表条目的数量作为参数传递到命令行,如果指定了non,则默认为8。

use strict;
use warnings;

my $max = shift // 8;

my $string;
my @strings;
push @strings, $string .= $_ & 3 ? 'A' : 'B' for 1 .. $max;

print "@strings\n";

<强>输出

A AA AAA AAAB AAABA AAABAA AAABAAA AAABAAAB

答案 2 :(得分:0)

如果您将&j++更改为$j++而将print($output . "/n")更改为print($output . "\n"),那么您的计划将正常运作。但它确实需要一些整理,比如这个

$A      = 3;
$B      = 1;
$i      = 1;
$output = "";
$j      = 1;

while ($i <= $ARGV[0]) {
  while ($j <= $i) {

    if ($A == 0 && $B == 0) {
      $A = 3;
      $B = 1;
    }

    if ($A > 0) {
      $output .= "A";
      $A--;
    }
    else {
      $output .= "B";
      $B--;
    }

    $j++;
  }

  print($output . "\n");
  $i++;
}