我正在尝试编写一个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;' –