首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl substr错误

Perl substr错误
EN

Stack Overflow用户
提问于 2014-01-12 07:50:29
回答 3查看 463关注 0票数 0

Perl函数有问题。这很简单但无论如何..。不知道是什么问题。

代码语言:javascript
复制
sub encode_date
{
    $date = $_[0];
    $day = substr($date, 0, 2);
    $month = substr($date, 2, 2);
    $year = substr($date, 6, 4);

    return "$year-$month-$day";
}

子接受"DD.MM.YYYY“格式化字符串,并必须将其转换为”YYYY DD“格式。

输入: 09.09.1993

输出: 0-09-93-19?

有人能解释一下是怎么回事吗。

p.s.:我为解码日期(从‘yyyy’到'dd.mm.yyyy')写了另一个子,所有的都正常工作。

代码语言:javascript
复制
sub decode_date
{
    $date = $_[0];
    $year = substr $date, 0, 4;
    $month = substr $date, 5, 2;
    $day = substr $date, 8, 2;
    return $day.".".$month.".".$year;
}

当然,我尝试了substr $date, 0, 2;substr($date, 0, 2);以及返回值的不同组合。

EN

回答 3

Stack Overflow用户

发布于 2014-01-12 07:54:30

月份开始于索引3,而不是2

代码语言:javascript
复制
sub encode_date
{
    my ($date) = @_;
    my $day = substr($date, 0, 2);
    my $month = substr($date, 3, 2);
    my $year = substr($date, 6, 4);

    return "$year-$month-$day";
}

也许更好的方法是用非数字(.)、反向数字来分割字符串,然后用破折号( dash - )将它们连接起来。

代码语言:javascript
复制
sub encode_date
{
    my ($date) = @_;

    return join "-", reverse split /\D/, $date;
}
票数 3
EN

Stack Overflow用户

发布于 2014-01-12 07:56:02

你的问题是,你的偏移是错误的,因为它们没有考虑到分离器。(例如,月份以偏移量3开始,而不是以2开始,因为它是在两个字符的日期之后加上一个句点。)

尽管如此,我认为编写此函数的最佳方法是:

代码语言:javascript
复制
sub encode_date($) {
    if ($_[0] =~ /^(\d\d)\.(\d\d)\.(\d{4})$/) {
        return "$3-$2-$1";
    }
}
票数 0
EN

Stack Overflow用户

发布于 2014-01-12 07:57:28

代码语言:javascript
复制
sub encode_date
{
    $date = $_[0];
    $day = substr($date, 0, 2);
    $month = substr($date, 3, 2);
    $year = substr($date, 6, 4);

    return "$year-$month-$day";
}

有两个问题。

我使用了encode_date(encode_date($date)); (2次)

另一个是$month = substr($date, 2, 2);正确的是$month = substr($date, 3, 2);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21072478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档