如何在perl中计算一行数字中的奇数?
How to count odd numbers in a row of numbers in perl?
我有这样的号码:
15-84-315-164
11-76-132-310
44-20-958-2732
而且我需要知道连续有多少个奇数。
例如15-84-315-164中有6个奇数。
我想使用 perl 和正则表达式作为解决方案。
use strict;
use warnings;
use feature 'say';
my @data = <DATA>;
chomp @data;
process_line($_) for @data;
sub process_line {
my $data = shift;
my $count;
my @digits = $data =~ /(\d)/g;
for my $digit (@digits) {
$digit%2 ? $count->{odd}++ : $count->{even}++;
}
say ' Odd: ' . $count->{odd} . ' Even: ' . $count->{even} . ' Line: ' . $data;
}
__DATA__
15-84-315-164
11-76-132-310
44-20-958-2732
输出
Odd: 6 Even: 4 Line: 15-84-315-164
Odd: 7 Even: 3 Line: 11-76-132-310
Odd: 4 Even: 7 Line: 44-20-958-2732
my $string = "15-84-315-164";
my ($number) = scalar( @{[ $string=~/(1|3|5|7|9)/gi ]} );
print $number
下面是正则表达式。
(1|3|5|7|9)
这基本上是查找是否存在奇数。
一旦我们有了正则表达式,我们就可以使用标量计算正则表达式出现的次数。
我有这样的号码:
15-84-315-164
11-76-132-310
44-20-958-2732
而且我需要知道连续有多少个奇数。
例如15-84-315-164中有6个奇数。
我想使用 perl 和正则表达式作为解决方案。
use strict;
use warnings;
use feature 'say';
my @data = <DATA>;
chomp @data;
process_line($_) for @data;
sub process_line {
my $data = shift;
my $count;
my @digits = $data =~ /(\d)/g;
for my $digit (@digits) {
$digit%2 ? $count->{odd}++ : $count->{even}++;
}
say ' Odd: ' . $count->{odd} . ' Even: ' . $count->{even} . ' Line: ' . $data;
}
__DATA__
15-84-315-164
11-76-132-310
44-20-958-2732
输出
Odd: 6 Even: 4 Line: 15-84-315-164
Odd: 7 Even: 3 Line: 11-76-132-310
Odd: 4 Even: 7 Line: 44-20-958-2732
my $string = "15-84-315-164";
my ($number) = scalar( @{[ $string=~/(1|3|5|7|9)/gi ]} );
print $number
下面是正则表达式。
(1|3|5|7|9)
这基本上是查找是否存在奇数。
一旦我们有了正则表达式,我们就可以使用标量计算正则表达式出现的次数。