我有一串多个零和'1',但我只想要字符串中的零值。 所以,我使用split函数来分割'1'但似乎它会在数组中产生undef或空字符串。 所以,我尝试使用foreach扫描每个数组元素,并比较是否有空字符串我认为是“undef”将被忽略。作为回报,非空字符串中的那些将不会被忽略,并将被放入另一个变量中。这些问题似乎无法识别我的“undef”变量。
OR 有另一种更好的方法来扫描字符串,以拉出字符串中的'0'数?
请帮忙解决这个问题。 编码:
#!/usr/bin/perl
use strict;
use warnings;
my $data = '111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000011111
';
my @values = split('1', $data);
my $zero = "0";
foreach my $val (@values)
{
if (!defined$val)
{
$zero= $val;
}
}
print "$zero\n";
exit 0;
非常感谢。
此致 尼基
答案 0 :(得分:5)
尝试使用tr
。它将所有出现的 0 音译为空字符串,并返回它所做的更改次数。这是你的零数。
my $data = '111100';
my $count = $temp =~ tr/0//;
print $count;
请查看this blog post以获取不同方法的基准。
答案 1 :(得分:1)
my $data = '111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000011111
';
my @arr=$data=~/0/g;
print scalar(@arr);
使用匹配操作,可以将所有0都提取到数组中,并且数组的长度将计算为零。
答案 2 :(得分:1)
不确定您需要什么,但正则表达式可能有用:
#!/usr/bin/perl
use strict;
use warnings;
my $data = '111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000011111';
# If you want an array of zeros
my @zeros = $data =~ /0/g;
print "@zeros\n";
# If you want the zeros together
my @multizeros = $data =~ /0+/g;
print "@multizeros\n";
给出:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
000000000000000
答案 3 :(得分:0)
虽然正则表达式匹配可能是最有效的方法,正如Guru和cdarke已经建议的那样,你可以通过拆分1
s组来进行拆分单1
s:
$d = 101111001;
say scalar split /1+/, $d; # prints 3