我想在Perl中以特定格式输出数组元素。
@myArray = ("A", "B", "C");
$text = something;
字符串应为'"A" "B" "C"
'(每个元素都用双引号括起来)。
但是,如果@myArray
为空,那么$text
也应为空。
我想过使用join()
,例如
$text = "\"" . join("\" \"", @myArray) . "\"";
if ($text eq "\"\"")
{
$text = "";
}
我认为哪种方法有效。但是,有更优雅的方法吗?
答案 0 :(得分: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";
另外,为了使代码更清晰,您可以使用qq//
运算符(行为与""
完全相同,但您可以选择分隔符)以避免转义"
。
答案 1 :(得分:4)
查斯。有正确的答案,但有时我使用$"
变量,它保存字符串以插入数组元素之间:
my $text = do { local $" = q<" ">; qq<"@array"> };
答案 2 :(得分:1)
我不确定使用“加入”。你想要一个带引号元素的标量字符串,还是只想要一个带引号元素的数组?如果是后者那么我怀疑以下会这样做
my @a = qw|a b c|;
@a = map {qq|"$_"|} @a;
当然,这可以避免测试元素是否最初被引用。如果您希望引用数组元素以便使用DBI插入数据库,那么更合适的方法可能是:
@a = map{$dbh->quote($_)} @a;
我希望这会有所帮助
答案 3 :(得分:-2)
它可能不会完全符合您的要求,但我是Data :: Dumper的忠实粉丝。