왜이 Perl로한다 : "CD"로Perl substr (STRING, @ARRAY) ne substr (STRING, OFFSET, LENGTH)?
@x=(0,2);
substr('abcd',@x)
을 평가?
그리고이 "AB"로 평가
substr('abcd',0,2);
?
왜이 Perl로한다 : "CD"로Perl substr (STRING, @ARRAY) ne substr (STRING, OFFSET, LENGTH)?
@x=(0,2);
substr('abcd',@x)
을 평가?
그리고이 "AB"로 평가
substr('abcd',0,2);
?
첫 번째는 @x
의 크기를 의미하므로 @x
입니다. 따라서 substr('abcd',2)
은 cd
이됩니다.
substr은 내장 함수로 프로토 타입을 가지고 있으므로 @x는 확장되지 않으므로 2를 반환하므로 기본적으로 substr ('abcd', 스칼라 (@x))을 호출합니다
substr
연산자의 설명 구문
substr EXPR,OFFSET,LENGTH,REPLACEMENT
substr EXPR,OFFSET,LENGTH
substr EXPR,OFFSET
하지
substr EXPR,ARRAY
또는보다 일반적이다
,substr EXPR,LIST
이 내용은 prototype
의 출력에 반영되어 있습니다 (항상 이에 의존 할 수있는 것은 아니지만).
$ perl -E'say prototype "CORE::substr"'
$$;$$
substr
의 첫번째 인수는 스칼라 문맥으로 평가된다.substr
의 두 번째 인수는 스칼라 컨텍스트에서 평가됩니다.substr
의 세 번째 인수 (선택 사항)는 스칼라 컨텍스트에서 평가됩니다.substr
의 4 번째 인수 (선택 사항)는 스칼라 컨텍스트에서 평가됩니다.@x
은 스칼라 컨텍스트에 포함 된 요소 수 (이 경우 2
)입니다.
당신은 다음과 같은 사용하여 원하는 것을 얻을 수 있습니다
내가 뭔가 새로운 것을 배운sub mysubstr {
if (@_ == 2) { substr($_[0], $_[1]) }
elsif (@_ == 3) { substr($_[0], $_[1], $_[2]) }
elsif (@_ == 4) { substr($_[0], $_[1], $_[2], $_[3]) }
else { die }
}
my @x = (0, 2);
mysubstr('abcd',@x)
+1, 조명 빠른 답변) – Sorin
감사합니다 – user1087245