首页 > 解决方案 > Perl:将数组元素复制到单个字符串中

问题描述

我试图将每个数组元素稍作修改复制到 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

标签: arraysstringperl

解决方案


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

您可以使用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 缺少前导斜杠 ( /)。很可能这不是故意的。)


推荐阅读