Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用Perl以dd/mm/yy格式输出日期_Regex_Perl_Hash - Fatal编程技术网

Regex 使用Perl以dd/mm/yy格式输出日期

Regex 使用Perl以dd/mm/yy格式输出日期,regex,perl,hash,Regex,Perl,Hash,我想将数据转换成一种格式,这种格式包含一年中存储的月份,如1月、2月、3月。。。etc转换为更标准的格式dd/mm/yy 我正在考虑将与月份相关的文本存储在散列中。结果应该是这样的 INPUT OUTPUT "DATE,04-Sep-2014" -> "04/09/14" 是自v5.9.5以来的核心模块: use Time::Piece; print localtime ->strptime('DATE,04-Sep-2

我想将数据转换成一种格式,这种格式包含一年中存储的月份,如1月、2月、3月。。。etc转换为更标准的格式dd/mm/yy

我正在考虑将与月份相关的文本存储在散列中。结果应该是这样的

INPUT                       OUTPUT
"DATE,04-Sep-2014"    ->   "04/09/14"
是自v5.9.5以来的核心模块:

use Time::Piece;
print localtime
    ->strptime('DATE,04-Sep-2014', 'DATE,%d-%b-%Y')
    ->strftime('%d/%m/%y');
输出


这将做你需要的事情,而无需求助于任何讨厌的模块

use strict;
use warnings;

print transform_date('DATE,04-Sep-2014');

{
   my (%months, $months_re);

   sub transform_date {

      my ($date_str) = @_;

      unless ($months_re) {
         @months{qw/ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec /} = 1 .. 12;
         $months_re = join '|', keys %months;
         $months_re = qr/(?:$months_re)/;
      }

      return unless my ($d, $m, $y) = $date_str =~ /(\d\d)-($months_re)-(\d\d\d\d)/;
      sprintf '%02d/%02d/%02d', $d, $months{$m}, $y % 100;
   }
}
输出


使用一两个。谢谢choroba,但我认为这不是我的解决方案,因为我没有时间::Piece,我也无法安装它,因为脚本需要在多台机器上运行。正如choroba所说,它自2007年以来一直是一个核心模块。你真的不想使用比这个版本旧的Perl。如果你可以安装你的脚本,你可以安装一个模块。它们是同一事物的两个不同名称。@jaypal:是的,我非常喜欢Time::Piece。我在取笑OP的评论,这对我来说不是一个解决方案,因为我没有时间::Piece,我也不能安装它。很多人不明白安装大多数模块只是复制一个pm文件。
use strict;
use warnings;

print transform_date('DATE,04-Sep-2014');

{
   my (%months, $months_re);

   sub transform_date {

      my ($date_str) = @_;

      unless ($months_re) {
         @months{qw/ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec /} = 1 .. 12;
         $months_re = join '|', keys %months;
         $months_re = qr/(?:$months_re)/;
      }

      return unless my ($d, $m, $y) = $date_str =~ /(\d\d)-($months_re)-(\d\d\d\d)/;
      sprintf '%02d/%02d/%02d', $d, $months{$m}, $y % 100;
   }
}
04/09/14