Perl substr 함수에 문제가 있습니다. 너무 간단하지만 어쨌든 ... 문제가 뭔지 모르겠다.Perl substr error
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"형식으로 변환해야합니다.
입력 : 1993년 9월 9일
출력 : 0-09-93-19 ???
아무도 잘못 설명해 줄 수 있습니까?
p .: 나는 ('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);
다른 조합을 시도했다.
입니다했다
encode_date(encode_date($date));
(2 번) 사용; 나는'1993-.0-09'을 얻습니다. (여전히 틀린 부분이지만, 부분 문자열의 오프셋이 잘못되었다는 것을 감안할 때 적어도 의미가 있습니다.) – ruakh첫 번째 예에서는 사용자가 설명하는 출력을 생성하지 않습니다. 그러나, 첫 번째 예제의 sub는 off-by-one으로 어려움을 겪습니다 : 두 번째'substr' 식은'substr ($ date, 3, 2)'이어야합니다. – DavidO
참. $ date는 2 번 인코딩되었습니다. 그것이 문제였습니다. 'encode_date (encode_date ($ date));'이 파일은 다른 파일에 있습니다. 타이. –