我有Perl substr函数的问题。这是如此简单,但无论如何......不知道是什么问题。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";
}
Sub接受“DD.MM.YYYY”格式的字符串,必须将其转换为“YYYY-MM-DD”格式。
输入: 1993年9月9日
输出: 0-09-93-19 ???
有人可以解释什么是错的,请。
p.s .:我为解码日期编写了另一个子文件(从'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);
和不同的组合。
我不能重现您所描述的输出;我得到了'1993-0.090'(当然这仍然是错误的,但至少有意义,因为你的子串偏移是错误的)。 – ruakh
您的第一个示例不会生成您描述的输出。然而,第一个例子的sub不会遭遇错误:第二个'substr'表达式应该是'substr($ date,3,2)'。 – DavidO
是的。 $日期被编码了2次。这是问题所在。 'encode_date(encode_date($ date));'这样的东西,但在不同的文件。 TY。 –