如何在perl中添加数字字符串

如何在perl中添加数字字符串,perl,Perl,在数字字符串中添加值时,我遇到一些问题: 我的字符串看起来像02:03:05:07:04:06。所有的数字都必须是10,然后我要把这个数字加到第二个位置的数字上 到目前为止,我已经 #!/usr/bin/perl -w use strict; my $str='02:03:05:07:04:06'; my @arr=split(/:/,$str); my @new_arr=pop(@arr); my $rand_val=int(rand(9)); my $val=$new_arr[0]+$ran

在数字字符串中添加值时,我遇到一些问题:

我的字符串看起来像
02:03:05:07:04:06
。所有的数字都必须是10,然后我要把这个数字加到第二个位置的数字上

到目前为止,我已经

#!/usr/bin/perl -w
use strict;
my $str='02:03:05:07:04:06';
my @arr=split(/:/,$str);
my @new_arr=pop(@arr);
my $rand_val=int(rand(9));
my $val=$new_arr[0]+$rand_val;
if($val>=10)
{
   I am unable to generate a logic here:(

}
请帮我解决这个问题


在添加数字后,我们必须加入字符串并将其打印:)

我看到一个错误:您可以

my @new_arr=pop(@arr);
(...)
my $val=$new_arr[0]+$rand_val;
但是
pop
只返回最后一个元素,而不是列表。

my$str='02:03:05:07:04:06';
my $str = '02:03:05:07:04:06';
my @nums = split /:/, $str;
my $add = int(rand(9)) + 1;
my $overflow = 1;
for (1..@nums) {
   if ($num[-$_] + $add < 10) {
      $num[-$_] += $add;
      $overflow = 0;
      last;
   }
}

die "Overflow" if $overflow;

$str = join ':', map sprintf('%02d', $_), @nums;
my@nums=split/:/,$str; 我的$add=int(兰特(9))+1; 我的$overflow=1; 对于(1..@nums){ 如果($num[-$\]+$add<10){ $num[-$\uz]+=$add; $overflow=0; 最后; } } 如果$Overflow,则为“Overflow”; $str=join':',map sprintf('%02d',$),@nums;
我刚刚运行了这个程序,它就工作了。需要注意的是,字符串的最后一个数字越小,“if($val>=10)”有效的可能性就越小

这并不能解决rand_val可能为0的问题,但我将把它作为一项任务留给您来解决。在遍历数组中的值直到数组中的随机值和当前最末值之和结束时,这将为您提供所需的内容

1  use strict;
2  my $str='02:03:05:07:04:06';
3  my @arr=split(/:/,$str);
4  my $rand_val=int(rand(9));
5  my $val;
6 
7  foreach my $i (reverse @arr){
8    $val = $i + $rand_val;
9    next if ($val >= 10);
10   print "val: $val, rand_val: $rand_val, value_used: $i\n";
11   last if ($val < 10);
12 }
1使用严格;
2我的$str='02:03:05:07:04:06';
3 my@arr=拆分(/:/,$str);
4我的$rand_val=int(rand(9));
5我的$val;
6.
7美元兑我的$i(反向@arr){
8$val=$i+$rand_val;
如果($val>=10),则为9;
10打印“val:$val,rand_val:$rand_val,value_used:$i\n”;
11最后一个if($val<10);
12 }

您能给我一些建议,让我解决这个问题吗?10允许还是不允许?你说“必须是10岁”。如果您必须添加到倒数第二个位置,您是否添加相同的随机数?在这种情况下,最后一个位置是否保持不变?当倒数第二个位置也超过限制时会发生什么?您是否实现了“大整数”?你能把数字从第一个加到第二个吗?列,或者你的意思是“携带十位数”?看起来更像一个mac地址,但为什么你要将自己限制为10?假设你的随机数是9。所以你把它加到6,等于15,这是不允许的。所以你把它加在4上,也就是说13,也就是大于10。为什么可以?或者你的意思是只加1到4,基本上是溢出的?我假设你想继续尝试超过最后两个位置。如果您真的只想尝试最后两个位置,请使用(1..2)的