【问题标题】:Perl: Copying array elements into single stringPerl:将数组元素复制到单个字符串中
【发布时间】:2020-11-21 04:36:53
【问题描述】:

我正在尝试将每个经过轻微修改的数组元素复制到 Perl 中的单个字符串变量中。我想要的是通过将 0x 前缀添加到字符串中来复制每个元素。这是我迄今为止尝试过的:

#!usr/bin/perl

  use strict;
  use warnings;

  my @values = (01, 02, 03, 04);
  my $res = "";
  
  foreach my $val (@values) {
    $res = join '', "0x", "$val", ", ";
  }

  print "$res\n";
 
  exit 0;

结果我只得到了 0x04,。想要的结果应该是:0x01, 0x02, 0x03, 0x04

【问题讨论】:

    标签: arrays string perl


    【解决方案1】:

    在您的循环中,您会在每次迭代中覆盖字符串。这就是为什么你只能得到最后一个值。

    您可以在整个数组上使用join(),而不仅仅是元素的各个部分。要为数字添加前缀和零填充并在数组中获取它们的十六进制表示,您可以使用map()sprintf()

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    my @values = (01, 02, 03, 04);
    my $res = '';
    
    $res = join(', ', map({ sprintf('0x%02x', $_) } @values));
    
    print("$res\n");
    
    exit(0);
    

    (另请注意,您的 shebang 缺少前导斜杠 (/)。很可能这不是故意的。)

    【讨论】:

    • 我完全理解你的代码。只是一个小提示:由于十六进制值不仅由数值组成,因此最好使用 %s 而不是 %i
    • OP 可能想要数字的十六进制表示。为此,请使用sprintf('0x%02x', $_)
    • @Emil:如果数组中有数字并且您想要它们的十六进制表示(我可能应该通过0x 前缀猜到),您可以使用x 而不是@ 987654332@ 在sprintf()。我编辑了答案。
    【解决方案2】:

    这样试试:

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    use Data::Dumper;
    
    my @values = (01, 02, 03, 04);
    my @array;
    
    foreach my $val (@values) {
        push (@array, "0x".$val);
    }
    
    print Dumper(\@array);
    
    my $res = join(",", @array);
    print $res;
    

    【讨论】:

    • OP 可能想要数字的十六进制表示。为此,请使用sprintf('0x%02x', $val)
    猜你喜欢
    • 2018-04-28
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    相关资源
    最近更新 更多