2011-08-17 39 views
4

如果我有一個名字如下的數組。如何在數組元素之間打印「AND」?

如何打印「Hi joe and jack and john」?

當數組中只有一個名稱時,該算法也應該有效。

#!/usr/bin/perl 

use warnings; 
use strict; 

my @a = qw /joe jack john/; 

my $mesg = "Hi "; 

foreach my $name (@a) { 

    if ($#a == 0) { 
    $mesg .= $name; 
    } else { 
    $mesg .= " and " . $name; 
    } 
} 

print $mesg; 
+0

http://www.ideone.com/iN2dt? – Konerak 2011-08-27 22:54:17

回答

8

通常我們使用數組的連接方法來做到這一點。這裏僞代碼:

@array = qw[name1 name2 name2]; 
print "Hey ", join(" and ", @array), "."; 
2

未經測試:

{ local $, = " and "; print "Hi "; print @a; } 
+0

你怎麼能測試一個班輪?做`perl -e`! (我在開玩笑:p) – Yuji 2011-08-17 12:50:50

+0

`$,`是什麼意思? – 2011-08-17 12:56:20

+3

$,表示:在數組元素之間打印的字符串。 – Ingo 2011-08-17 13:00:01

2

只需使用特殊變量$"

$"="and"; #" (this last double quote is to help the syntax coloring) 
$mesg="Hi @a"; 
2

要收集perldoc perlvar答案,您可以做(至少)兩件事之一。

1)設置$"(列表分隔):

當一個數組或數組切片被內插到一個雙引號 字符串或類似情況下,如/.../,其元素是用此值分隔 。默認是一個空格。例如,這樣的:

print "The array is: @array\n"; 

等效於此:

print "The array is: " . join($", @array) . "\n"; 

=>$"影響所述陣列的所述內插的行爲爲一個字符串

2 )設置$,(輸出字段分隔符):

打印操作員的輸出字段分隔符。如果已定義,則在每個打印參數之間打印該值 。默認是undef。 助記符:打印語句中有「,」時打印的內容。

=>$,影響print語句的行爲。

兩者都可以工作,並且可以與local一起使用來僅在封閉範圍內設置特殊變量的值。我想不同的是,$"您不限於打印命令:

my @z = qw/ a b c /; 
local $" = " and "; 
my $line = "@z"; 
print $line; 

這裏的「神奇」發生在3號線沒有打印命令。

事實上,使用join是最具可讀性的,除非你使用一個小封閉塊,否則未來的讀者可能不會注意到魔術變量的設置(比較靠近頂部),並且從未發現行爲不是預期什麼與正常表現相比。我會將這些技巧保存爲小一次和一行,並將可讀取的join用於生產代碼。