如何输出引号中包含的每个Perl数组元素?

rlb*_*ond 6 arrays string perl

我想在Perl中以特定格式输出数组的元素.

@myArray = ("A", "B", "C");
$text = something;
Run Code Online (Sandbox Code Playgroud)

有些东西应该是字符串' "A" "B" "C"'(用双引号括起来的每个元素).

但是,如果@myArray是空的,那么也$text应该是空的.我想过使用join(),比如

$text = "\"" . join("\" \"", @myArray) . "\"";
if ($text eq "\"\"")
{
    $text = "";
}
Run Code Online (Sandbox Code Playgroud)

我认为这会奏效.但是,有更优雅的方法吗?

Cha*_*ens 27

用途map:

#!/usr/bin/perl

use strict;
use warnings;

my @a    = qw/ A B C /;
my @b;
my $text = join ' ', map { qq/"$_"/ } @a;
print "text for (@a) is [$text]\n";

$text = join ' ', map { qq/"$_"/ } @b;
print "text for (@b) is [$text]\n";
Run Code Online (Sandbox Code Playgroud)

此外,为了使代码更清晰,您可以使用qq//运算符(行为完全相同"",但您可以选择分隔符)以避免转义"s.

  • map和reduce(来自List :: Util)是重要的高阶函数.如果你喜欢地图,你会喜欢Mark Jason Dominus的高阶Perl:http://hop.perl.plover.com/ (4认同)
  • 我是地图的忠实粉丝.这非常有用,我认为每个程序员都应该学习如何使用它. (2认同)
  • @J.P.是的,它更简单:`map {"'$ _'"} @ a`. (2认同)

bri*_*foy 5

查斯。有正确的答案,但有时我使用$"变量,它保存要放在数组元素之间进行插值的字符串:

my $text = do { local $" = q<" ">; qq<"@array"> };
Run Code Online (Sandbox Code Playgroud)