#!/usr/bin/perl use strict; use warnings; my @list = ( [qw(a)], [qw(a b)], [qw(a b c)], ); for (@list){ print join_english(@$_), $/; } sub join_english { return $_[0] if @_ < 2; my $last = pop @_; return join(', ', @_), ' and ' . $last; }