2010-05-21 154 views
8

比方說,我有元素如何在Perl中將列表輸出爲逗號分隔值?

@list=(1,2,3); 
#desired output 
1,2,3 

的名單,我想他們打印爲逗號分隔值。最重要的是,我不希望最後一個元素後面有一個逗號。

在Perl中這樣做的最簡潔的方法是什麼?

回答

13
print join(',', @list), "\n"; 
+1

不要這樣做。它不處理任何特殊情況。 – 2010-05-22 15:47:53

2

加入用逗號分隔的列表。

@list=(1,2,3); 
$output = join(",",@list); 
9

您有幾種選擇。最通用的是join功能加入他們的行列:

print join(',', @list), "\n"; 

另一種方法是修改special variables,影響print聲明。例如,上述一個的效果可能與

$, = ","; 
$\ = "\n"; 
print @list; 

來實現,還可以自動如果它經歷了雙引號擴展加入列表:

$" = ","; 
print "@list","\n"; 

請注意,如果您修改特殊變量,如$,$\$",您將它們設置爲全局。爲避免它,請使用local關鍵字並將操作數放在一個塊中。

5

對於簡單的情況,join是完美的。

但是,如果你想產生或解析CSV文件,你最好使用Text::CSV。它將處理引用和轉義逗號以及各種其他有害問題。它也非常快。

+0

再次,以錯誤的答案領先! :)沒有簡單的情況。只有簡單的測試數據不能顯示所有真實世界的案例。 – 2010-05-22 15:48:23

+3

是的,@ brian,有簡單的例子。例如,你可以很容易地處理一個規範或標準,它說「數據值可能不包含逗號」。在一般情況下,「加入」是創建CSV文件的正確方法嗎?不,絕對不是。但OP詢問了如何在除最後一個之後用逗號打印值的列表 - 除了在相鄰值之間插入逗號之外,沒有關於機器可分析或轉義/引用任何或任何其他要求的結果 - 而且這是* *什麼「加入」呢。 – 2010-05-22 16:24:31

+0

根據我的經驗,即使說明最終變化的規格,並且如果您要推薦捷徑,您也需要強調這些陷阱。否則,人們會走捷徑,並在以後傷害自己。 – 2010-05-23 02:13:07