我正在嘗試編寫一個Perl腳本,它將採用Pattern中的日期,2011年10月24日並將其轉換爲10,24,2011。用散列值替換數組元素
爲了做到這一點,我準備了一個Hash,它將月份名稱作爲一個關鍵字,並將一個數值表示月份的位置作爲一個值。
我將讀取輸入字符串,使用正則表達式從上面的格式中提取月份名稱。
將本月的名稱替換爲與該月對應的值作爲關鍵字。
下面是我編碼到目前爲止的腳本,但它不適用於我。
@dates陣列將每個元素在這個格式 - > 10月24日,2011年
%days=("January",01,"February",02,"March",03,"April",04,"May",05,"June",06,"July",07,"August",08,"September",09,"October",10,"November",11,"December",12);
@output = map{
$pattern=$_;
$pattern =~ s/(.*)\s/$days{$1};
} @dates;
foreach $output (@output)
{
print $output."\n";
}
這裏是什麼,我想這個代碼做一點解釋。
@output將具有新的格式化數組,其月份名稱將替換爲相應的數字,表示它在哈希中定義。
map函數用於實時轉換數組的元素。
字符,隨後空間的序列是用於從圖案,10月24日提取月份名稱的正則表達式,2011.
這將減少$ 1所引用。
我用,$天{$ 1}
爲什麼不使用'DateTime'? – CanSpice
「不工作」是什麼意思?它在'$ pattern =〜s /(。*)\ s/$ days {$ 1};' - 你錯過了第三個'/'字符看起來像一個簡單的語法錯誤 - 但它會更容易如果您提供完整的小腳本,請提供反饋意見。 (順便說一句,CanSpice建議使用'DateTime'是一個很好的建議,儘管我個人發現在某些Linux發行版中可以很容易地使用_some_ date模塊,其他的其他日期模塊也很容易使用,所以稍加研究一下可能是值得的) – sarnold
考慮將'map'語句寫成s /../../ for my @output = @dates;' –