2012-01-26 3 views

답변

4

첫 번째는 @x의 크기를 의미하므로 @x입니다. 따라서 substr('abcd',2)cd이됩니다.

5

substr은 내장 함수로 프로토 타입을 가지고 있으므로 @x는 확장되지 않으므로 2를 반환하므로 기본적으로 substr ('abcd', 스칼라 (@x))을 호출합니다

12

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) 
+0

+1, 조명 빠른 답변) – Sorin

+0

감사합니다 – user1087245