我什么时候运行这段代码。它不显示任何输出。有人看错了吗? 我试图在输出中显示这个:
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++;
}
答案 0 :(得分:2)
当我使用数字参数(行数)运行它时,它适用于我。
如何简化代码的想法:
#!/usr/bin/perl
use warnings;
use strict;
my $count = shift;
my $A = 3;
my $B = 1;
my $string = q();
$string .= ('A' x $A) . ('B' x $B) while $count > length $string;
print substr($string, 0, $_), "\n" for 1 .. $count;
它使用不同的算法 - 它创建尽可能长的字符串,然后输出部分字符串。
答案 1 :(得分:0)
如果没有SELECT pc.* --select columns from the other tables as needed.
FROM
`personContact` pc
INNER JOIN person p ON pc.ID = p.ID
INNER JOIN personDetails pd on pd.ID = p.ID
where pc.personzip in (12563, 12522, 10509) -- add more zips as needed
,@ARGV
永远不会运行。
while ($i <= $ARGV[0])
是执行脚本时提供的命令行参数的数组。你没有提供任何命令行参数。如果您@ARGV
生效,系统会警告您use warnings
未初始化。
答案 2 :(得分:0)
从ikegami
评论开始。程序编译时,您无法传递输入。例如,假设您的文件名为algo.pl
。你能用
perl algo.pl 10
这里10是程序的输入值。在程序中,值由$ARGV[0]
所以你的程序看起来像while ($i <= $ARGV[0])
。
如果您希望传递多个值,例如perl filename.pl 12 data1 data2
,请在$ARGV[0] $ARGV[1] $ARGV[2]
的数据检索中获取更多信息see here。
如果要在执行时使用STDIN
use warnings;
use strict;
my $A = 3;
my $B = 1;
my $i = 1;
my $output = "";
my $j = 1;
print "Enter the value: ";
chomp(my $value = <STDIN>);
while ($i <= $value) {
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++;
}