Как мне отформатировать даты в Perl? - PullRequest
6 голосов
/ 22 февраля 2009

Я изменяю ранее существующий сценарий в XCode, чтобы настроить мои заголовки файла. Сценарий Perl, и это не мой лучший язык. :)

Мне просто нужно вставить текущую дату в заголовок в формате дд / мм / гг.

Вот мой сценарий:

#! /usr/bin/perl -w
# Insert HeaderDoc comment for a header
#
# Inserts a template HeaderDoc comment for the header.
use strict;

# get path to document
my $headerPath = <<'HEADERPATH';
%%%{PBXFilePath}%%%
HEADERPATH
chomp $headerPath;
my $rootFileName = &rootFileNameFromPath($headerPath);

print "/*";
print " * $rootFileName\n";
print " * Project\n";
print " *\n";
print " * Created by Me on ";
# in bash it would be something like that :
# date +%d/%m/%y | awk '{printf "%s\n", $1}';
print " * Copyright 2009 My_companie. All rights reserved.\n";
print " *\n";
print " */\n";

sub rootFileNameFromPath {
    my $path = shift;

    my @pathParts = split (m'/', $path);
    my $filename = pop (@pathParts);
    my $rootFileName = "$filename";
    $rootFileName =~ s/\.h$//;
    return $rootFileName;
}

exit 0;

Я только что изменил команду печати, поэтому не спрашивайте меня об остальном коде:)

Ответы [ 3 ]

19 голосов
/ 22 февраля 2009

Вместо удаления strict (!), Почему бы просто не сделать код strict чистым?

my ($mday, $mon, $year) = (localtime(time))[3, 4, 5];

$mon  += 1;
$year += 1900;

printf "%02d/%02d/%02d\n", $mday, $mon, $year % 100;

Может быть, даже лучше (так как более знакомый смотрит на кого-то, кто спросил с точки зрения Bash):

# At the top, under use strict;
use POSIX qw/strftime/;

# then later...
my $date = strftime "%d/%m/%y", localtime;
print "$date\n";

Забавное совпадение: Perl Training Australia публикует полурегулярные советы (вы можете получить их по электронной почте или через Интернет), и только сегодня есть новый на strftime.

9 голосов
/ 23 февраля 2009

Вы также можете использовать DateTime и связанные модули, что, конечно, является полным излишним для такого маленького скрипта, как этот. Но для более крупного приложения вы должны использовать твердые модули, а не делать все долгий путь. Для записи, с DateTime вы написали бы:

DateTime->today()->strftime('%d/%m/%y');

Или вы можете использовать более современный язык формата CLDR:

DateTime->today->format_cldr('dd/MM/YYYY');
2 голосов
/ 22 февраля 2009
@time = localtime(time);
$mday = $time[3];
$mon = $time[4]+1;
$year = $time[5]+1900;
print "$mday/$mon/$year\n";

Должен это сделать.

Edit:

printf "%02d/%02d/%4d",$mday,$mon+1,$year+1900";

Также позаботится о дополнении нулями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...