Как вывести каждый элемент массива Perl, заключенный в кавычки? - PullRequest
5 голосов
/ 11 апреля 2009

Я хочу вывести элементы массива в определенном формате на Perl.

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

Что-то должно быть строкой '"A" "B" "C"' (каждый элемент заключен в двойные кавычки).

Однако, если @myArray пусто, то $text тоже должно быть. Я думал об использовании join(), например

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

Который, я думаю, сработает. Однако есть ли более элегантный способ сделать это?

Ответы [ 4 ]

27 голосов
/ 11 апреля 2009

Использование 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.

4 голосов
/ 11 апреля 2009

Чес. имеет правильный ответ, но иногда я использую переменную $", которая содержит строку для вставки между элементами массива для интерполяции:

my $text = do { local $" = q<" ">; qq<"@array"> };
1 голос
/ 11 апреля 2009

Я не уверен в использовании "соединения". Вы хотите одну скалярную строку с элементами в кавычках или просто массив с элементами в кавычках? Если последнее, то я подозреваю, что следующее сделает это

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

Конечно, это обходит проверку, были ли элементы процитированы изначально. Если вы хотите, чтобы элементы массива цитировались для вставки в базу данных с использованием, например, DBI, то более подходящим способом может быть:

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

Надеюсь, это поможет

0 голосов
/ 11 апреля 2009

Возможно, это не совсем то, что вы просите, но я большой поклонник Data :: Dumper для такого рода вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...