【问题标题】:How do I output each Perl array element surrounded in quotes?如何输出用引号括起来的每个 Perl 数组元素?
【发布时间】:2010-10-18 20:39:59
【问题描述】:

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

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

应该是字符串'"A" "B" "C"'(每个元素都用双引号括起来)。

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

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

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

【问题讨论】:

    标签: perl arrays string


    【解决方案1】:

    使用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。

    【讨论】:

    • 我是地图的忠实粉丝。它非常有用,我认为每个程序员都应该学习如何使用它。
    • map 和 reduce(来自 List::Util)是至关重要的高阶函数。如果你喜欢 map,你会喜欢 Mark Jason Dominus 的 Higher Order Perl:hop.perl.plover.com
    • 有没有办法为单引号做到这一点?
    • @JP。是的,它更简单:map { "'$_'" } @a.
    • @Chas.Owens。太棒了..谢谢!
    【解决方案2】:

    它可能不会完全按照你的要求做,但我是 Data::Dumper 的忠实粉丝。

    【讨论】:

      【解决方案3】:

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

      my $text = do { local $" = q<" ">; qq<"@array"> };
      

      【讨论】:

        【解决方案4】:

        我不确定是否使用“加入”。你想要一个带有引号元素的标量字符串还是只想要一个带有引号元素的数组?如果是后者,那么我怀疑以下会做到这一点

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

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

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

        希望对你有帮助

        【讨论】:

        • 为什么要连接而不是插值?不过,关于第二点的好建议,我认为这是为了输出而不是传递给将值解释为字符串的其他东西。
        • 卫生署!当然。 :) 将我的第一个片段的第二行更改为:@a = map {qq|"$_"|} @a;
        猜你喜欢
        • 1970-01-01
        • 2011-05-02
        • 1970-01-01
        • 2018-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-27
        相关资源
        最近更新 更多