如何使用逗号以及''加入列表?

时间:2016-02-12 13:18:59

标签: perl

给定列表(a, b, c)创建字符串的最好方法是什么,其中逗号分隔所有元素,除了由'和a, b and c分隔的最后一个元素。理想情况下,这也适用于一个和两个元素列表。

4 个答案:

答案 0 :(得分:6)

在这种情况下,在一个语句中干扰所有内容会使解决方案更难阅读。

sub nice_join {
    my $last = pop;
    return $last if !@_;
    return join(', ', @_) . " and $last";
}

如果你想要除了undef以外的东西没有参数,

sub nice_join {
    return "none" if !@_;
    my $last = pop;
    return $last if !@_;
    return join(', ', @_) . " and $last";
}

答案 1 :(得分:3)

#! /usr/bin/perl
use warnings;
use strict;
use feature qw{ say };

use Test::More;

sub nice_join {
    my @connectors = (q(), (', ') x (@_ - 2), ' and ');
    return join q(), map shift(@connectors) . $_, @_
}

is nice_join(qw( a     )), 'a',          'single';
is nice_join(qw( a b   )), 'a and b',    'double';
is nice_join(qw( a b c )), 'a, b and c', 'treble';

done_testing();

对于牛津逗号,您需要将数组更改为

my @connectors = (q(), (', ') x (@_ - 2), (',' x (@_ > 2)) . ' and ');

答案 2 :(得分:2)

我的想法是,最简单的方法就是使用join来制作以逗号分隔的列表,然后将最终的逗号转换为and

我认为这显示了

my @list = qw(a b c);

my $nice = join(', ', @list) =~ s/ .* \K , / and/xr;

say $nice;

<强>给予

a, b and c

答案 3 :(得分:1)

在问一个问题之前,请记住搜索问题之前已经问过类似的问题(但是对于Python):How to efficiently join a list with commas and add "and" before the last element

你可以在perl中执行此操作的一种方法是:

#!/usr/bin/perl
use v5.10;

my @list = qw( a b c );

say join ' and ', $#list ? ( join(', ', @list[0..$#list-1]), $list[-1] ) : @list if @list;

将打印:

  • a列表qw( a );
  • a and b列表qw( a b );和
  • a, b and c列表qw( a b c )

如果列表为空,则不会打印任何内容。