我的数组有问题。我正在尝试从@mas3
创建新数组,问题在于@mas6
我的程序不会向数组添加任何低于10的数字。但正如您所看到的,数组@mas3
中的数字少于10。
#!/usr/bin/perl
$eilute1 = "Sveiki man yra 10 metu as buvau gimtadienyje pries 2 metus";
$eilute2 = "Sveiki man sueis 15 metu o kazkada buvo tik 5";
print "$eilute1";
print "$eilute2";
print "\n";
@mas1=split(" ",$eilute1);
@mas2=split(" ",$eilute2);
print "Pirmas masyvas\n@mas1\nAntras masyvas\n@mas2\n";
print "\n";
print "Pirmas naujas masyvas\n";
my @mas3=(@mas1,@mas2);
print "@mas3\n";
my $i=0;
my $x=scalar(@mas3);
while($i < $x){
my $reiksme=@mas3[$i];
if(length($reiksme) > 4) { my @mas4=push(@mas4,$reiksme); }
elsif(length($reiksme) <= 4) { my @mas5=push(@mas5,$reiksme); }
elsif($reiksme < 10) { my @mas6=push(@mas6,$reiksme); }
else { print " ## Error ##\n" } ;
$i++;
}
print "\n";
print "@mas4\n";
print "@mas5\n";
print "@mas6\n";
答案 0 :(得分:0)
所有项目都放入@mas4
或@mas5
数组,因为始终满足第一个或第二个条件,因此无法达到任何else
块:
if(length($reiksme) > 4) { my @mas4=push(@mas4,$reiksme); }
elsif(length($reiksme) <= 4) { my @mas5=push(@mas5,$reiksme); }
对于它们没有任何其他条件,变量大于4或小于或等于4.
此外,对于$reiksme < 10
您可能会错过length()
周围的$reiksme
。
最后但并非最不重要 - 您不需要将推送结果分配给其他变量,您修改的原始变量将被修改。
答案 1 :(得分:0)
我稍稍整理了你的程序,以便我可以正确地看到块的开始和结束位置。我还添加了use strict
和use warnings
,这是必不可少的,正如有人评论的那样。
正如Zbynek写的那样,每个单词要么长于四个字符,要么四个字符和更短,所以前两个条件中的一个总是会成功,第三个条件永远不会被测试。
测试字符串是否包含数字的最简单方法是使用正则表达式。我使用了$reiksme =~ /\d/ and length $reiksme == 1
,其中正则表达式/\d/
测试字符串是否包含数字,如果它只有一个字符长,那么它必须是0到9.我&#39 ; ve也将测试移到了开头,以便它不会被其他两个测试覆盖
#!/usr/bin/perl
use strict;
use warnings;
my $eilute1 = "Sveiki man yra 10 metu as buvau gimtadienyje pries 2 metus";
my $eilute2 = "Sveiki man sueis 15 metu o kazkada buvo tik 5";
print "$eilute1\n";
print "$eilute2\n";
print "\n";
my @mas1 = split ' ', $eilute1;
my @mas2 = split ' ', $eilute2;
print "Pirmas masyvas\n@mas1\nAntras masyvas\n@mas2\n";
print "\n";
print "Pirmas naujas masyvas\n";
my @mas3 = ( @mas1, @mas2 );
print "@mas3\n";
my (@mas4, @mas5, @mas6);
for my $reiksme ( @mas3 ) {
if ( $reiksme =~ /\d/ and length $reiksme == 1 ) {
push @mas6, $reiksme;
}
elsif ( length($reiksme) > 4 ) {
push @mas4, $reiksme;
}
elsif ( length($reiksme) <= 4 ) {
push @mas5, $reiksme;
}
else {
print " ## Error ##\n";
}
}
print "\n";
print "4 - @mas4\n\n";
print "5 - @mas5\n\n";
print "6 - @mas6\n\n";
Sveiki man yra 10 metu as buvau gimtadienyje pries 2 metus
Sveiki man sueis 15 metu o kazkada buvo tik 5
Pirmas masyvas
Sveiki man yra 10 metu as buvau gimtadienyje pries 2 metus
Antras masyvas
Sveiki man sueis 15 metu o kazkada buvo tik 5
Pirmas naujas masyvas
Sveiki man yra 10 metu as buvau gimtadienyje pries 2 metus Sveiki man sueis 15 metu o kazkada buvo tik 5
4 - Sveiki buvau gimtadienyje pries metus Sveiki sueis kazkada
5 - man yra 10 metu as man 15 metu o buvo tik
6 - 2 5