代码之家  ›  专栏  ›  技术社区  ›  rlbond

如何输出用引号括起来的每个Perl数组元素?

  •  5
  • rlbond  · 技术社区  · 15 年前

    我想以Perl的特定格式输出数组的元素。

    @myArray = ("A", "B", "C");
    $text = something;
    

    什么东西应该是绳子 "A" "B" "C" '(每个元素都用双引号括起来)。

    然而,如果 @myArray 是空的 $text 应该也是。 我想用 join() ,如

    $text = "\"" . join("\" \"", @myArray) . "\"";
    if ($text eq "\"\"")
    {
        $text = "";
    }
    

    我认为这是可行的。然而,有没有更优雅的方式来做到这一点?

    4 回复  |  直到 14 年前
        1
  •  26
  •   Chas. Owens    15 年前

    使用 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";
    

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

        2
  •  4
  •   brian d foy JRFerguson    14 年前

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

    my $text = do { local $" = q<" ">; qq<"@array"> };
    
        3
  •  1
  •   Chas. Owens    15 年前

    我不确定是否使用“加入”。您想要带引号的元素的单个标量字符串,还是只需要带引号的元素的数组?如果是后者,那么我怀疑下面的方法可以做到。

    my @a = qw|a b c|;
    @a = map {qq|"$_"|} @a;    
    

    当然,这回避了元素是否最初被引用的测试。例如,如果希望引用数组元素以便使用dbi插入数据库,则更合适的方法可能是:

    @a = map{$dbh->quote($_)} @a;
    

    我希望这有帮助

        4
  •  -2
  •   Paul Tomblin    15 年前

    它可能不完全符合您的要求,但我是Data::Dumper的忠实粉丝。