我正在尝试阅读包含字母'n','s','e','w'的文件。
如何查找这些字母并将其添加到名为$ns
和$ew
的变量中,
$ns
表示添加'n'或减去's'。
$ew
表示添加'e'或减去'w'。
这就是我所拥有的:
open (FILE, 'randwalk1')
or die "Could not open file";
my $ns = 0;
my $ew = 0;
while (my $file1 = <FILE>) {
if ($file1 =~ /n+/) {
$ns = $ns + 1;
} elsif ($file1 =~ /s/) {
$ns = $ns - 1;
} elsif ($file1 =~ /e/) {
$ew = $ew + 1;
} elsif ($file1 =~ /w/) {
$ew = $ew - 1;
}
}
输入文件(randwalk1
)如下所示:
ensweswewnnewwwsweenwsssssnewwennnesewewwewsnnewwwsewsenssns
newnwssswennesnseewnwsnwnwnnwwwewes
neesnwnsenwsnnnewwswnnneesswssnswenwsnnwewswwsnennneeeeswewe
答案 0 :(得分:6)
您检查该行是否有n
,找到一行,然后忽略该行的其余部分。您需要检查该行的每个字符。
my $home_returns = 0;
my $ns = 0;
my $ew = 0;
while (my $line = <>) {
chomp($line);
for my $char (split //, $line) {
if ($char eq "n") { ++$ns; }
elsif ($char eq "s") { --$ns; }
elsif ($char eq "e") { ++$ew; }
elsif ($char eq "w") { --$ew; }
++$home_returns if $ns == 0 && $ew == 0;
}
}
或
my $home_returns = 0;
my %counts = map { $_ => 0 } qw( n s e w );
while (my $line = <>) {
chomp($line);
for my $char (split //, $line) {
++$counts{$char};
++$home_returns
if $counts{n} == $counts{s}
&& $counts{e} == $counts{w};
}
}