[英]Perl substr error
我对Perl substr函数有问题。 它是如此简单,但是无论如何...不知道出了什么问题。
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-MM-DD”格式。
输入: 09.09.1993
输出: 0-09-93-19 ???
任何人都可以解释什么问题。
ps:我写了另一个用于解码日期的子项(从'yyyy-mm-dd'到'dd.mm.yyyy'),并且一切正常。
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);
以及返回值的不同组合。
月从索引3
开始,而不是2
。
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";
}
也许更好的方法是用非digit( .
)分割字符串,将数字反向,然后用破折号将它们连接起来-
sub encode_date
{
my ($date) = @_;
return join "-", reverse split /\D/, $date;
}
您的问题是您的偏移量是错误的,因为它们没有考虑分隔符。 (例如,月份从偏移量3
而不是2
,因为它是在两个字符的日期加上句点之后。)
也就是说,我认为编写此函数的最佳方法是:
sub encode_date($) {
if ($_[0] =~ /^(\d\d)\.(\d\d)\.(\d{4})$/) {
return "$3-$2-$1";
}
}
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.